Soh*_*pta 0 t-sql sql-server-2008r2-express
我理解这一点
IF EXISTS(SELECT NULL) PRINT 'TRUE';
Run Code Online (Sandbox Code Playgroud)
将始终打印,TRUE因为毕竟NULL是SQL Server中的值,但为什么会这样
IF EXISTS(SELECT NULL) PRINT 'TRUE'
Run Code Online (Sandbox Code Playgroud)
打印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';
Run Code Online (Sandbox Code Playgroud)
为了解释,我们将查看ANSI-92 SQL,搜索" Query expressions 191".
这是案例3a(我的粗体):
如果
<select list> "*"简单地包含在一个直接包含在a中的<subquery>那个中<exists predicate>,那么<select list>它等同于<value expression>一个任意的<literal>.
所以,这表示你可以在EXISTS位中找到任何旧垃圾:它应该被忽略