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
比较的值应始终返回False/UNKNOWNNULL
- 这使得代码更难维护,因为开发人员可能没有意识到它使用的是非标准设置,或者对此感到困惑,以及
- 在SQL Server的未来版本中,该设置将导致显式错误