1

我试图比较 2 个值 -1 为空,其他为数字,但它以某种方式等于“等于”

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

结果:相等

4

2 回答 2

9

您无法比较NULL值,无论是 with=还是<>since都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 时 null null 为 null 怎么办?

于 2013-07-30T14:56:33.500 回答
2

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

根据MSDN

当 SET ANSI_NULLS 为 ON 时,所有针对空值的比较都会评估为 UNKNOWN。

于 2013-07-30T14:55:57.837 回答