Sql where子句中的NULL值

Sql where子句中的NULL值,sql,sql-server-2012,Sql,Sql Server 2012,在存储过程中,我有这个查询 DECLARE @BadRowsCount int; SET @BadRowsCount = 0; SELECT @BadRowsCount = COUNT(*) FROM #ImportTemp WHERE #ImportTemp.Status <> 'A' AND #ImportTemp.Status <> 'B' 我必须定义WHERE子句,例如: WHERE (#ImportTemp.Status <> 'A' AND

在存储过程中,我有这个查询

DECLARE @BadRowsCount int;
SET @BadRowsCount = 0;

SELECT @BadRowsCount = COUNT(*) 
FROM #ImportTemp
WHERE #ImportTemp.Status <> 'A' AND #ImportTemp.Status <> 'B'
我必须定义WHERE子句,例如:

WHERE (#ImportTemp.Status <> 'A' AND #ImportTemp.Status <> 'B') OR #ImportTemp.Status is NULL
其中(#ImportTemp.Status“A”和#ImportTemp.Status“B”)或#ImportTemp.Status为空

因为非相等运算符(
)与大多数运算符一样,不是空保存。这意味着与NULL比较时会导致未知。

,因为与大多数运算符一样,not equal运算符(
)不是NULL save。这意味着当与NULL进行比较时,结果为未知。

默认情况下,在SQL Server中,如果其中一个值为NULL,则比较运算符返回未知值(即非true或false)

MSDN文档

有一些方法可以改变SQLServer处理空比较的方式,例如。一定要注意即将对该值的默认值进行的更改


下面是一个示例,它涵盖了与null处理相关的几个问题。

默认情况下,在SQL Server中,如果其中一个值为null,则比较运算符返回UNKNOWN(即非true或false)

MSDN文档

有一些方法可以改变SQLServer处理空比较的方式,例如。一定要注意即将对该值的默认值进行的更改

下面是一个示例,介绍了与空处理相关的几个问题

WHERE (#ImportTemp.Status <> 'A' AND #ImportTemp.Status <> 'B') OR #ImportTemp.Status is NULL