SQL:IS NULL不起作用

时间:2013-09-23 14:48:33

标签: sql-server tsql sql-server-2012

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

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附近的语法不正确”。

2 个答案:

答案 0 :(得分:10)

CASE WHEN语法正确:

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

您知道可以将此缩短为

SELECT ISNULL(@count1, 0)

答案 1 :(得分: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

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

SELECT COALESCE(@count1, 0)