Sql server 数值空值vs值--比较

Sql server 数值空值vs值--比较,sql-server,Sql Server,我试着比较2个值-1为空,另一个为数字,但不知何故它等于“相等” declare@value1 int; 声明@value2 int; 选择@value1=null 选择@value2=1 如果(@value1@value2) 打印“不相等” 其他的 打印“相等” 结果:如果(NULL@value)为false,则EqualNULL会导致所有比较失败 启用“设置ANSI_NULLS”时,所有与null值的比较结果均为未知 NULL使所有比较失败,因此如果(NULL@value)为false

我试着比较2个值-1为空,另一个为数字,但不知何故它等于“相等”

declare@value1 int;
声明@value2 int;
选择@value1=null
选择@value2=1
如果(@value1@value2)
打印“不相等”
其他的
打印“相等”

结果:如果(NULL@value)为false,则Equal

NULL
会导致所有比较失败

启用“设置ANSI_NULLS”时,所有与null值的比较结果均为未知


NULL
使所有比较失败,因此
如果(NULL@value)
为false

启用“设置ANSI_NULLS”时,所有与null值的比较结果均为未知


不能将
NULL
值与
=
进行比较,因为
NULL
表示未定义

使用
IS
如果您想知道某个值是否为
NULL
,可以使用:

IF ( ( @value1 IS NULL 
       AND @value2 IS NULL ) 
      OR (( @value1 IS NOT NULL 
            AND @value2 IS NOT NULL 
            AND @value1 = @value2 )) ) 
  PRINT 'equal' 
ELSE 
  PRINT 'not equal' 

请参阅:

您不能比较
NULL
值,既不能与
=
也不能与
进行比较,因为
NULL
表示未定义

使用
IS
如果您想知道某个值是否为
NULL
,可以使用:

IF ( ( @value1 IS NULL 
       AND @value2 IS NULL ) 
      OR (( @value1 IS NOT NULL 
            AND @value2 IS NOT NULL 
            AND @value1 = @value2 )) ) 
  PRINT 'equal' 
ELSE 
  PRINT 'not equal' 
见: