我的表中有一个值,包含位(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参数吗?
答案 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)