2013-07-30 43 views
1

我试着去比较两个值-1是空等是数字,但它在某种程度上等于“平等”数字空值VS值 - 比较

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

结果:平等

回答

2

NULL失败因此所有比较if(null <> @value)都是错误的。

MSDN

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

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?