declare @a int
select DATABASEPROPERTYEX('Test','IsAnsiNullsEnabled')
if @a is null select 'is null'
else select 'not null'if null=null select 'is null'
else select 'not null'if @a=null select 'is null'
else select 'not null'
我的数据库是SQlServer2005 Express
执行这个脚本,第一个结果为0,按照MSDN上所说表明Test数据库ANSI_NULLS选项为off,即两个表达式均为NULL时,则等号(=)运算符返回 TRUE。可是最后两个结果却与这句话的含义相违背.请问为什么?
else select 'not null'
但ANSI_NULLS选项为off,我觉的最后两个结果应该显示出is null才正确啊
declare @a int
--select DATABASEPROPERTYEX('Test','IsAnsiNullsEnabled')
if @a is null select 'is null'
else select 'not null'if null=null select 'is null'
else select 'not null'if @a=null select 'is null'
else select 'not null'
/*-------
is null(1 行受影响)
-------
is null(1 行受影响)
-------
is null(1 行受影响)*/
select DATABASEPROPERTYEX('Test','IsAnsiNullsEnabled')
if @a is null select 'is null'
else select 'not null'
--is nullif null=null select 'is null'
else select 'not null'
--is nullif @a=null select 'is null'
else select 'not null'
--is null
你打开test数据库属性,将它的ansi_nulls设置为已启用,则该调用就返回1.
set ansi_nulls off 设置的是数据库的 ansi nulls 默认值.
我的数据库的属性,默认就没有为ansi_nulls设置为启用(选项旁未打钩).
而且ANSI_NULLS默认不为ON,而是OFF.可以参见下面网址.http://msdn.microsoft.com/zh-cn/library/ms179472(SQL.90).aspxAnsi_nulls和DATABASEPROPERTYEX函数中的IsAnsiNullsEnabled应该是指的同一个东西吧?
既然DATABASEPROPERTYEX('Test','IsAnsiNullsEnabled')返回0,也就是说ansi_nulls是off(默认的也就是off).这样就会有null=null表达式返回true(打印出结果是is null),可实际上这个表达式没有返回true(打印出的是not null).这不是矛盾了吗?
要判断一个列值是否为NULL,可以用 columnname is null 来处理.