首页 >数据库 >mysql教程 >为什么 NULL = NULL 在 SQL Server 中计算结果为 False?

为什么 NULL = NULL 在 SQL Server 中计算结果为 False?

Barbara Streisand
Barbara Streisand原创
2025-01-20 23:12:12382浏览

Why Does NULL = NULL Evaluate to False in SQL Server?

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 的方式,其中它通常被认为是表示未定义状态的特殊值。

示例:

以下代码片段演示了差异:

<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,两个IF语句都会打印“TRUE”。 对于 ansi_nulls ON,第一个 IF 语句将打印“FALSE”,而第二个

语句也将打印“FALSE”

ansi_nulls理解

设置和 NULL 比较固有的歧义对于编写健壮且无错误的 SQL Server 代码至关重要。 请始终注意查询中如何处理 NULL,以避免意外结果。

以上是为什么 NULL = NULL 在 SQL Server 中计算结果为 False?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn