Sql 存储过程中具有空值的位参数
我的表中有一个位值,它包含位(0或1)和NULL(默认值) 这是我的狂欢: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
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-有多少个空值工作得很好!谢谢:)工作得很好!谢谢:)