我希望在我的 TSQL 库中添加一些代码,以防止在列中的数据为空时在 SQL 中执行聚合。理想情况下,在 sql server 中会有一个 SUM_NN(对于 sum no null),如果任何值为 null,它会引发错误。
因为你不能从 UDF 中引发错误,所以我能想到的唯一方法是这样的,尽管我不喜欢这个解决方案:
CREATE FUNCTION dbo.NULL_TEST_F(@arg FLOAT)
RETURNS FLOAT
AS
BEGIN
IF(@arg IS NULL)
SELECT 1/0
RETURN @arg
END
注意:我认为这是一个愚蠢的解决方案,但是当我丢失数据时我被烧毁了太多次。此外,我们使用的是 SQL Server 2005,但我对 2008 和 2012 解决方案持开放态度。此外,我想知道其他数据库如何处理此类问题。
最佳答案
这是我的最终解决方案:
CREATE FUNCTION [dbo].[NullTest_F]
(
@input FLOAT,
@message VARCHAR(100)
)
RETURNS FLOAT
AS
BEGIN
DECLARE @test INT
IF(@input IS NULL)
SELECT @test = CAST(@message AS INT)
RETURN @input
END
然后我可以在运行聚合函数时将其与有用的错误消息一起嵌入。示例:
CREATE TABLE Data (
Date DATETIME,
DataPoint FLOAT
)
INSERT INTO Data (Date, DataPoint) VALUES ('2012-03-01', 4)
INSERT INTO Data (Date, DataPoint) VALUES ('2012-03-02', 6)
SELECT SUM(NullTest_F(DataPoint, 'Missing data at' + CONVERT(VARCHAR(10), Data))
FROM Data
关于sql - 如果传递 null 将引发错误的 TSQL 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11786054/