IF 等于或子句

IF equals or clause

我有一个存储过程,它运行两个单独的查询并将数据放入两个临时表中。然后我在下面有一个 IF 语句,根据结果将显示两个表之一。

DECLARE @DATASET1 AS FLOAT
DECLARE @DATASET2 AS FLOAT

SET @DATASET1 = (SELECT SUM(PREM) FROM #Prem1)
SET @DATASET2 = (SELECT SUM(PREM) FROM #Prem2)

IF (@DATASET1 = 0)
BEGIN

    SELECT  DATE,
            SUM(PREM) AS PREM
    FROM #DATASET2
    GROUP BY YEAR, MONTH, DATE
    ORDER BY YEAR, MONTH

END

IF (@DATASET2 = 0)
BEGIN

    SELECT  DATE,
            SUM(PREM) AS PREM
    FROM #DATASET1 
    GROUP BY YEAR, MONTH, DATE
    ORDER BY YEAR, MONTH

END 

直到我在 dataset1 上遇到一些没有产生 0 但根本没有产生数据的输出之前,它一直运行良好。

所以我想知道是否可以将这部分查询更新为几乎说:

IF (@DATASET1 = 0 or '')

我试过类似的东西,但似乎没有用,所以我的问题。

如果 table 或 PREM 列中没有记录,您的标量聚合查询 (SELECT SUM(PREM) FROM #Prem1) 将 return 一个 NULL 值包含只有 NULL 个值。

你可以用 IS NULL 处理 NULL,像这样:

IF (@DATASET1 IS NULL OR @DATASET1 = 0)

你也可以使用COALESCE():

IF (COALESCE(@DATASET1, 0) = 0)

你可以通过ISNULL()

来实现
IF (ISNULL(@DATASET1, 0) = 0)

Syntax: ISNULL(expression, value)

Parameter           Description
expression          Required. The expression to test whether is NULL
value Required.     The value to return if expression is NULL