数字空值与值 - 比较

时间:2013-07-30 14:52:26

标签: sql-server

我试图比较2个值-1是空的而其他是数字,但它在某种程度上等于“相等”

declare @value1 int;
declare @value2 int;
select @value1 = null
select @value2 = 1
if (@value1 <> @value2)
    print 'not equal'
else 
    print 'equal'

结果:等于

2 个答案:

答案 0 :(得分:9)

您无法比较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' 

请参阅:What if null if null is null null null is null?

答案 1 :(得分:2)

NULL无法进行所有比较,因此if(null <> @value)为假。

MSDN

  

当SET ANSI_NULLS为ON时,对空值的所有比较都计算为UNKNOWN。