0

我的表中有一个位值,其中包含位(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

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

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

WHERE Sub IS NULL

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

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

4

2 回答 2

3

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

WHERE (Sub = @SubscriberState OR (@SubscriberState IS NULL AND Sub IS NULL))
于 2013-08-15T13:42:30.863 回答
1

您可以将空值设置为 0 并像这样检查它:

WHERE Isnull(Sub,0) = @SubscriberState

或者有一个三态的bodge,比如:

WHERE Isnull(Sub,3) = isnull(@SubscriberState,3)
于 2013-08-15T13:39:09.617 回答