2

我正在尝试测试变量是否为空,但我似乎有语法错误,我的代码是:

DECLARE @count1 INT

SET @count1 = 
(SELECT HPlayedHome FROM League WHERE GameID = 
(SELECT TOP 1 GameID From Goals WHERE Date <= '20130923' AND Home = 'Palermo'
AND (GameID >=2551 AND GameId <= 5100) ORDER BY Date Desc))

SELECT CASE @count1 IS NULL THEN 0 ELSE @count1 END

我希望查询返回 @count1 的值,但如果它为 NULL,则返回 0。SQL SERVER 2012 突出显示 IS 上的语法错误,“IS 附近的语法不正确”。

4

2 回答 2

11

CASE WHEN是正确的语法:

SELECT CASE WHEN @count1 IS NULL THEN 0 ELSE @count1 END

您知道您可以将其缩短为

SELECT ISNULL(@count1, 0)
于 2013-09-23T14:49:34.860 回答
1

CASE有两种形式:

CASE
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
    ELSE result3
END

CASE variable
    WHEN value1 THEN result1
    WHEN value2 THEN result2
    ELSE result3
END

您可以使用表格 2,但将 IS 更改为 WHEN 以使其在语法上正确:

SELECT CASE @count1 WHEN NULL THEN 0 ELSE @count1 END

不幸的是,比较是使用相等测试进行的,并且 NULL 不等于 NULL,因此您必须使用表格 1:

SELECT CASE WHEN @count1 IS NULL THEN 0 ELSE @count1 END

已经有一个函数来处理 nulls: COALESCE(),它返回传递给它的第一个非 null 值:

SELECT COALESCE(@count1, 0)
于 2013-09-23T14:57:36.097 回答