【问题标题】:SQL Server Exists predicateSQL Server 存在谓词
【发布时间】:2011-08-05 10:05:40
【问题描述】:

我明白这个

IF EXISTS(SELECT NULL) PRINT 'TRUE';

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

IF EXISTS(SELECT NULL) PRINT 'TRUE'

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

【问题讨论】:

  • 也许只有我一个人,但这两行对我来说都一样。

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


【解决方案1】:

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

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 位中包含任何旧垃圾:应该忽略它

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-05
    相关资源
    最近更新 更多