SQL正确检查NOT EQUAL TO NULL

时间:2014-02-28 11:45:44

标签: sql sql-server sql-server-2008

我使用<>!=在SQL中测试NOT EQUAL TO。我尝试了以下语法,除了IS NOT NULL之外都失败了。

检查NOT EQUAL with NULL

的正确方法是什么
declare @p1 int
set @p1=null

SELECT COUNT(*) 

FROM Emp_Details

WHERE [source_id] IS NOT null -- gives 1289 records


SELECT COUNT(*)

FROM Emp_Details

WHERE [source_id] != null  -- gives 0 records

SELECT COUNT(*)

FROM Emp_Details

WHERE [source_id] <> null  -- gives 0 records


SELECT COUNT(*)

FROM Emp_Details

WHERE [source_id] <> @p1 -- gives 0 records

即使我通过0 or 1 for @p1

,我也绝不会执行以下条件
  IF COALESCE ( @p1, NULL ) != NULL  
  BEGIN  
   DELETE  
   FROM @EmpDetailTable  
   WHERE [source_id] != @p1
  END  

注意:某些source_id值为NULL

5 个答案:

答案 0 :(得分:3)

检查表达式是否为空的常用方法是IS NOT NULLIS NULL

 WHERE (expression IS NOT NULL)

或:

 WHERE NOT (expression IS NULL)

还有IS DISTINCT FROM运算符,但并非所有DBMS都实现了它:

 WHERE (expression IS DISTINCT FROM NULL)

代码:

IF COALESCE ( @p1, NULL ) != NULL  
BEGIN  
 DELETE  
 FROM @EmpDetailTable  
 WHERE [source_id] != @p1
END  

如果您的意思是仅在@p1不为空时执行,可以写成如下:

IF @p1 IS NOT NULL  
BEGIN  
 DELETE  
 FROM @EmpDetailTable  
 WHERE [source_id] != @p1
END  

答案 1 :(得分:2)

IS NOT null是正确的方法。

由于this链接的Remarks部分表示“如果其中一个或两个参数都为NULL,则比较运算符返回UNKNOWN。”所以我们不能依赖Comparison Operators

答案 2 :(得分:1)

您无法与NULL比较尝试

select * where id = null
select * where id != null

以上示例将返回所有行!

你必须使用is null

select * where id is null
select * where id is not null

对于null有一个常见的误解。它并不代表什么&#34;什么都没有&#34;它意味着&#34;我不知道,缺乏数据&#34;并且翻译成英语更像是&#34;无论什么&#34;或&#34;任何事情&#34;。

答案 3 :(得分:0)

您可以使用IS NOT null

To determine whether an expression is NULL, use IS NULL or IS NOT NULL instead 
of comparison operators, such as = or !=. Comparison operators return UNKNOWN 
if either or both arguments are NULL.

declare @p1 int
set @p1=null

SELECT COUNT(*) 

FROM Emp_Details

WHERE [source_id] IS NOT null

答案 4 :(得分:0)

你应该尝试这个:

IF COALESCE(@p1, NULL) IS NOT NULL  
BEGIN  
  DELETE  
  FROM @EmpDetailTable  
  WHERE [source_id] != @p1
END