sql - 如果传递 null 将引发错误的 TSQL 函数?

标签 sql sql-server database tsql

我希望在我的 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/

相关文章:

sql-server - ColdFusion 中的 jTDS 立即超时

mysql - 如何从 MYSQL 中的一张表更新另一张表?具有额外值(value)

mysql - 左连接的主键

database - DB2 - 是什么导致了不确定线程​​?

sql - 是否可以使用当前行的非空单元格的数量来更新列?

mysql - 如何从复杂的sql查询中知道源表

mysql - 使用 SELECT 查询更新数据(有两个相关表)

java - 结果集 : do {. ..} while (...);与 while(...) {...}

mysql - SQL 和连接

mysql - 我知道 GUID 几乎是唯一的。但是假设它是独一无二的是可以接受的做法吗?