存储过程中具有 Null 值的位参数

grm*_*hel 2 sql stored-procedures

我的表中有一个位值,其中包含位(0 或 1)和 NULL(默认)。

这是我的 SProc:

CREATE PROCEDURE msp_CustomerStatistics 
   @Postal_MinValue int,
   @Postal_MaxValue int,
   @SubscriberState bit,
   @CustomerType varchar(50)
BEGIN
   [...]
   WHERE Sub = @SubscriberState
   AND Postal BETWEEN @Postal_MinValue AND @Postal_MaxValue
   AND CustType = @CustomerType
END
Run Code Online (Sandbox Code Playgroud)

当我用1或0传递@SubscriberState参数时,结果是正确的。但是当我传递 null 时,结果是 0,这是不正确的。

如果我使用以下 where 子句创建 SQL 选择:

WHERE Sub IS NULL
Run Code Online (Sandbox Code Playgroud)

然后结果显示正确的计数。

知道如何让我的存储过程在 WHERE 子句中也使用 NULL 参数吗?

Dan*_*Dan 5

不能将=运算符与空值一起使用。与 NULL 的比较始终返回 false。尝试将 WHERE 语句修改为以下内容:

WHERE (Sub = @SubscriberState OR (@SubscriberState IS NULL AND Sub IS NULL))
Run Code Online (Sandbox Code Playgroud)