SQL Server 独特的 NULL 比较:为什么 NULL = NULL 经常是假
SQL Server 处理 NULL 值的方式与许多其他编程语言不同。 一个常见的混淆来源是 NULL = NULL
通常计算为 FALSE
。这不是一个错误;而是一个错误。这是一个深思熟虑的设计选择,植根于 NULL 本身的定义。
在 SQL Server 中,NULL 表示未知或缺失值。 因此,比较两个 NULL 就像比较两个未知数 – 不可能明确地说它们是否相等,因为它们的值未定义。 NULL = NULL
的结果通常是 FALSE
(或者有时是 NULL
,具体取决于上下文和系统设置)。
此行为源于 ANSI SQL-92 标准。但是,了解 SQL Server 中 ansi_nulls
设置的影响至关重要。
ansi_nulls
ansi_nulls
设置决定 SQL Server 如何解释 NULL 比较。
ansi_nulls ON
(默认): 在此设置(默认)下,NULL = NULL
计算结果为 FALSE
,与 ANSI SQL-92 标准保持一致。
ansi_nulls OFF
: 使用此设置,NULL = NULL
的计算结果为 TRUE
。此行为反映了许多其他编程语言中处理 NULL 的方式,其中它通常被认为是表示未定义状态的特殊值。
示例:
以下代码片段演示了差异:
SET ANSI_NULLS OFF; IF NULL = NULL PRINT 'TRUE'; ELSE PRINT 'FALSE'; SET ANSI_NULLS ON; IF NULL = NULL PRINT 'TRUE'; ELSE PRINT 'FALSE';
使用ansi_nulls OFF
,两个IF
语句都会打印“TRUE”。 对于 ansi_nulls ON
,第一个 IF
语句将打印“FALSE”,而第二个
ansi_nulls
理解
以上是为什么 NULL = NULL 在 SQL Server 中计算结果为 False?的详细内容。更多信息请关注PHP中文网其他相关文章!