我使用<>
和!=
在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
答案 0 :(得分:3)
检查表达式是否为空的常用方法是IS NOT NULL
和IS 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