SQL Server存在谓词

时间:2011-08-05 10:05:41

标签: tsql sql-server-2008r2-express

我明白这个

IF EXISTS(SELECT NULL) PRINT 'TRUE';

总是打印TRUE,因为毕竟NULL是SQL Server中的值,但为什么会这样

IF EXISTS(SELECT NULL) PRINT 'TRUE'

打印TRUE因为子查询会导致错误,EXISTS总是会检查是否存在,所以为什么会这样。

1 个答案:

答案 0 :(得分:5)

猜测,因为您的问题中存在复制/粘贴错误

EXISTS不会检查值。它检查行。

所以这些是有效的,因为SELECT给出了一行

IF EXISTS(SELECT 1/0) PRINT 'TRUE' 
IF EXISTS(SELECT NULL) PRINT 'TRUE';
IF EXISTS(SELECT CAST('fish' AS int)) PRINT 'TRUE';

要解释一下,我们会查看ANSI-92 SQL,搜索“Query expressions 191”。

这是案例3a(我的粗体):

  

如果<select list> "*"只包含在<subquery>中                 然后,它立即包含在<exists predicate>中                 <select list>相当于<value expression>                 是任意 <literal>

所以,这表示你可以在EXISTS位中找到任何旧的垃圾:它应该被忽略