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

Sql 存储过程中具有空值的位参数,sql,stored-procedures,Sql,Stored Procedures,我的表中有一个位值,它包含位(0或1)和NULL(默认值) 这是我的狂欢: CREATE PROCEDURE msp_CustomerStatistics @Postal_MinValue int, @Postal_MaxValue int, @SubscriberState bit, @CustomerType varchar(50) BEGIN [...] WHERE Sub = @SubscriberState AND Postal BETWEE

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

这是我的狂欢:

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参数吗?

你可以将NULL值设置为0,然后像这样检查它:

WHERE Isnull(Sub,0) = @SubscriberState
或者有一种三态的感觉,比如:

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

您可以将null值设置为0,并按如下方式进行检查:

WHERE Isnull(Sub,0) = @SubscriberState
或者有一种三态的感觉,比如:

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

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

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

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

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

问题是:NULL值与0值、1值或第三个值相同吗?NULL值不等于0或1。正如Philip Kelley所说,NULL值与0或1的处理方式相同(是的,我知道设置有点愚蠢,应该重新设计,但这就是我现在拥有的数据:))。简而言之,我想分别对每个值进行计数:-多少个0-多少个1-多少个NULL问题是:NULL值是作为0值、1值还是作为第三个值处理?NULL值不等于0或1。正如Philip Kelley所说,NULL值与0或1的处理方式相同(是的,我知道设置有点愚蠢,应该重新设计,但这就是我现在拥有的数据:))。简而言之,我想分别对每个值进行计数:-有多少个0-有多少个1-有多少个空值工作得很好!谢谢:)工作得很好!谢谢:)