ColumnName = Null和ColumnName之间的差异在SQL Server中是空的

时间:2014-01-19 07:21:43

标签: sql sql-server

请您澄清一下SQL Server中ColumnName = NullColumnName Is Null之间的区别。我已经用谷歌搜索了这个,但我得到了任何澄清。

其实我想检索列有空值

Select * from Table1 where column1 is null 

此查询返回预期结果,但以下查询未给出

 Select * from Table1 where column1 = null 

这些查询之间有什么区别。

3 个答案:

答案 0 :(得分:3)

使用普通运算符与null进行比较永远不会成立。

这基本上是因为null是“未知”,因此无法确定它是否是某个值。

必须使用特殊语法is nullis not null来确定空值。

答案 1 :(得分:2)

NULL上使用comparison运算符将导致取消Unkown result

看看下面的例子:

Declare @temp table
(
 val1 int,
 val2 int 
)

INSERT INTO @temp
VALUES (1,NULL),
       (NULL,1),
       (NULL,NULL)

SELECT CASE 
        WHEN val1 > val2 THEN 'Val 1 greater'
        WHEN val2 > val1 THEN 'val 1 smaller'
        WHEN val1 = val2 THEN 'Val1 is equal to val 2'
        WHEN val1 = NULL THEN 'val1 = NULL'
        WHEN val1 IS NULL THEN 'val1 IS NULL'
        ELSE 'Unknown'
        END result 
FROM @temp

这将导致:

Unknown
val1 IS NULL
val1 IS NULL

请注意,将ANSI_NULLS更改为OFF会更改=运算符的行为,并会TRUE返回NULL = NULL

任何方式,恕我直言(我认为流行的观点是),最佳做法是使用IS NULL

答案 2 :(得分:-2)

“is null”是正确的方法。这就像<>之间的区别和!=不等于。 !=是标准。

这是Microsoft文档:http://technet.microsoft.com/en-us/library/ms188795.aspx

“要确定表达式是否为NULL,请使用IS NULL或IS NOT NULL而不是比较运算符(例如=或!=)。当其中一个或两个参数为NULL时,比较运算符返回UNKNOWN。”