为什么此内联count()条件返回错误?

时间:2018-07-09 16:44:18

标签: sql sql-server tsql

以下t-sql可以正常工作:

--test1
DECLARE @IntValCount INT;
SELECT @IntValCount = COUNT(IntVal) FROM @AppIdList;
IF(@IntValCount = 0)
BEGIN
    print 'test1'
END

但是,如果我尝试使用以下sql将count()条件编写为内联表达式,则ssms将返回错误“'='附近的语法不正确”:

--test2 
IF(SELECT COUNT(IntVal) FROM @AppIdList = 0)
BEGIN
    print 'test2'
END

我是否为test2错误编写了sql或由于某种原因dos ss不允许这种特殊方法?

1 个答案:

答案 0 :(得分:3)

您的括号位于错误的位置:

IF ( (SELECT COUNT(IntVal) FROM @AppIdList) = 0)
BEGIN
    print 'test2'
END;

但是,最好使用NOT EXISTS

IF ( NOT EXISTS (SELECT 1 FROM @AppIdList WHERE IntVal IS NOT NULL) )
BEGIN
    print 'test2'
END;

为什么? NOT EXISTS可以停在第一个匹配值。 SELECT COUNT()必须读取所有潜在值。