1

2つの値を比較しようとしています-1はnullで、その他は数値ですが、どういうわけか「等しい」に等しい

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

NULLwith=<>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)false です。

MSDNごと

SET ANSI_NULLS が ON の場合、NULL 値に対するすべての比較は UNKNOWN と評価されます。

于 2013-07-30T14:55:57.837 に答える