以下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不允许这种特殊方法?
答案 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()
必须读取所有潜在值。