SET ANSI_NULLS OFF
做了什么?
答案 0 :(得分:17)
SQL-92标准要求等于(=)或不等于(<>)与空值的比较计算为FALSE。
当
SET ANSI_NULLS
ON 时,即使column_name中存在空值,使用WHERE column_name = NULL
的SELECT语句也会返回零行。即使column_name中存在非空值,使用WHERE column_name <> NULL
的SELECT语句也会返回零行。当
SET ANSI_NULLS
关闭时,等于(=)和不等于(&lt;&gt;)比较运算符不符合SQL-92标准。使用WHERE column_name = NULL
的SELECT语句返回column_name中具有空值的行。使用WHERE column_name <> NULL
的SELECT语句返回列中具有非空值的行。此外,使用WHERE column_name <> XYZ_value
的SELECT语句将返回非XYZ_value且不为NULL的所有行。
答案 1 :(得分:10)
它改变了NULL
的行为方式。 ANSI中的NULL
会产生类似
NULL = NULL
- &gt;假
NULL <> NULL
- &gt;假
关闭ANSI_NULLS
,(NULL = NULL
) - &gt;真。
答案 2 :(得分:0)
当打开时它不计算Null值并返回0.
启用此选项后,任何将值与null进行比较的查询都将返回0
实施例: SET ANSI_NULLS ON SELECT empname FROM emp1 WHERE phone = NULL
说明: 它将不返回任何内容,因为SET ANSI_NULLS为ON。
来源:
http://www.xpode.com/ShowArticle.aspx?ArticleId=599
谢谢,
罗希特夏尔
答案 3 :(得分:0)
SET ANSI_NULLS 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,