SQL Server存在谓词



我明白了

IF EXISTS(SELECT NULL) PRINT 'TRUE';

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

IF EXISTS(SELECT NULL) PRINT 'TRUE'

打印TRUE作为子查询将导致错误,EXISTS总是检查是否存在,所以为什么这是可能的。

猜测,因为你的问题中有复制/粘贴错误

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 (my bold):

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

所以,这意味着你可以在EXISTS位中有任何旧的垃圾:它应该被忽略

相关内容

  • 没有找到相关文章

最新更新