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

时间:2013-08-15 13:36:24

标签: 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

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

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

WHERE Sub IS NULL

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

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

2 个答案:

答案 0 :(得分:2)

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

WHERE (Sub = @SubscriberState OR (@SubscriberState IS NULL AND Sub IS NULL))

答案 1 :(得分:1)

您可以将空值设置为0并按以下方式检查:

WHERE Isnull(Sub,0) = @SubscriberState

或者有三种类型的躲避:

WHERE Isnull(Sub,3) = isnull(@SubscriberState,3)