请您澄清一下SQL Server中ColumnName = Null
和ColumnName Is Null
之间的区别。我已经用谷歌搜索了这个,但我得到了任何澄清。
其实我想检索列有空值
Select * from Table1 where column1 is null
此查询返回预期结果,但以下查询未给出
Select * from Table1 where column1 = null
这些查询之间有什么区别。
答案 0 :(得分:3)
使用普通运算符与null进行比较永远不会成立。
这基本上是因为null是“未知”,因此无法确定它是否是某个值。
必须使用特殊语法is null
和is 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。”