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。可是最后两个结果却与这句话的含义相违背.请问为什么?

解决方案 »

  1.   

    if null is null  select 'is null'
    else select 'not null'
      

  2.   

    http://topic.csdn.net/t/20050417/22/3944313.html
      

  3.   

    最后两个结果都为:not null.
    但ANSI_NULLS选项为off,我觉的最后两个结果应该显示出is null才正确啊
      

  4.   

    我没有用到存储过程,而且按MSDN上说ANSI_NULLS的默认值就是off,并且我以前也没改变过它的值
      

  5.   

    Transact-SQL 支持在与空值进行比较时,允许比较运算符返回 TRUE 或 FALSE。通过设置 ANSI_NULLS OFF 可将该选项激活。ANSI_NULLS默认为ON
      

  6.   

    SET ANSI_NULLS off
    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 行受影响)*/
      

  7.   

    SET ANSI_NULLS OFFdeclare @a int
    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
      

  8.   

    如果ANSI_NULLS默认为ON,为什么select DATABASEPROPERTYEX('Test','IsAnsiNullsEnabled')  返回的是0呢?
      

  9.   

    set Ansi_nulls 是对连接的设置,而DATABASEPROPERTYEX('Test','IsAnsiNullsEnabled') 是对数据库的设置.
    你打开test数据库属性,将它的ansi_nulls设置为已启用,则该调用就返回1.
      

  10.   

    DATABASEPROPERTYEX('Test','IsAnsiNullsEnabled') 设置的是数据库的 ansi nulls 已启用.
    set ansi_nulls off 设置的是数据库的 ansi nulls 默认值.
      

  11.   


    我的数据库的属性,默认就没有为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).这不是矛盾了吗?
      

  12.   

    不能用null=null这样的等式.
    要判断一个列值是否为NULL,可以用 columnname is null 来处理.