Sql server 'SET ANSI_NULLS OFF'有什么作用?

Sql server 'SET ANSI_NULLS OFF'有什么作用?,sql-server,Sql Server,将ANSI_NULLS设置为OFF的功能是什么? SQL-92标准要求将等于(=)或不等于()与空值进行比较,结果为FALSE 当SET ANSI_NULLS为ON时,使用其中column_name=NULL的SELECT语句返回零行,即使column_name中存在空值。使用其中column\u name NULL的SELECT语句返回零行,即使column\u name中存在非NULL值 当SET ANSI_NULLS为OFF时,等于(=)和不等于()比较运算符不符合SQL-92标准。SEL

将ANSI_NULLS设置为OFF的功能是什么?

SQL-92标准要求将等于(=)或不等于()与空值进行比较,结果为FALSE

SET ANSI_NULLS
ON时,使用
其中column_name=NULL
的SELECT语句返回零行,即使column_name中存在空值。使用
其中column\u name NULL
的SELECT语句返回零行,即使column\u name中存在非NULL值

SET ANSI_NULLS
OFF时,等于(=)和不等于()比较运算符不符合SQL-92标准。SELECT语句使用
其中column\u name=NULL
返回column\u name中具有NULL值的行。使用
WHERE column\u name NULL
的SELECT语句返回列中具有非空值的行。此外,使用
WHERE column_name XYZ_value
的SELECT语句返回所有非XYZ_值且不为NULL的行


它改变了
NULL
s的行为方式NULL
s产生如下结果

NULL=NULL
->false

NULL-NULL
->false


禁用时,(
NULL=NULL
)->true。

启用时,不计算NULL值并返回0

启用此选项后,任何将值与null进行比较的查询都将返回0

例如: 将ANSI_空值设置为ON 从emp1中选择empname,其中phone=NULL

说明: 它将不返回任何内容,因为SET ANSI_NULLS处于启用状态

资料来源:

谢谢


Rohit

将ANSI_NULL设置为OFF
指示服务器使用非标准语义评估涉及
NULL
的语句

SET ANSI_NULLS OFF;
SELECT CASE WHEN NULL = NULL THEN 1 ELSE 0 END; -- Evaluates to 1 (bad!)
SET ANSI_NULLS ON;
SELECT CASE WHEN NULL = NULL THEN 1 ELSE 0 END; -- Evaluates to 0 (good!)
您不应使用非标准语义设置
SET ANSI_NULLS OFF
创建新代码,因为:

  • 没有必要,
  • 对于数据库查询,当
    NULL
    与任何其他值(例如在
    WHERE
    子句中)的处理方式不同时,会出现语义丰富的查询,与
    NULL
    比较的值应始终返回False/UNKNOWN
  • 这使得代码更难维护,因为开发人员可能没有意识到它使用的是非标准设置,或者对此感到困惑,以及
  • 在SQL Server的未来版本中,该设置将导致显式错误

谷歌搜索SET ANSI NULLS ON的第一个结果。你可能认为搜索它比在这里发帖更快。这正是我自己找到它的方式D这个答案不应该被否决,直到它被修正——它不应该只是链接到信息,它还应该引用它。这不是重点吗?@Matt:除非链接到的资源消失了。在MSDN的情况下不太可能,但在其他情况下可能。我通常尝试独立撰写答案,并使用链接进行进一步阅读或作为支持性文档。我认为没有理由不因为一篇信息性文章是一个链接而对其进行投票。