理解为什么 NULL = NULL 在 SQL Server 中为 False
在 SQL Server 中,WHERE
子句条件(例如 nullParam = NULL
)的计算结果为 false。这可能看起来违反直觉,因为 NULL
通常表示缺失数据。 关键是理解 SQL Server 对 NULL
.
NULL
不仅仅代表缺失的数据;它代表一个未知或不存在的值。 因此,比较两个 NULL
值本质上是不确定的。 我们不能明确地说两个未知数是否相等或不相等。这种不确定性会导致错误的评估。
这符合 ANSI SQL-92 标准。 默认情况下,SQL Server 使用 ANSI_NULLS ON
运行,强制执行此行为。 但是,设置 ANSI_NULLS OFF
会将比较结果更改为 true。
考虑这个例子:
<code class="language-sql">SET ANSI_NULLS OFF; IF NULL = NULL PRINT 'true'; ELSE PRINT 'false'; SET ANSI_NULLS ON; IF NULL = NULL PRINT 'true'; ELSE PRINT 'false';</code>
使用ANSI_NULLS OFF
,输出为“true”。 使用 ANSI_NULLS ON
(默认值),输出为“false”,演示此设置如何控制 SQL Server 对 NULL
比较的处理。 使用 IS NULL
是检查空值的正确方法。
以上是为什么 SQL Server 中 NULL = NULL 返回 False?的详细内容。更多信息请关注PHP中文网其他相关文章!