【发布时间】:2023-03-20 14:12:01
【问题描述】:
我有一张桌子如下
declare @t table(bucket bigint null)
insert into @t select 1 union all select 2 union all select -1 union all select 5
现在让我编写下面的查询(按 Bucket 0 过滤 - 所有值都来了)
declare @Bucket bigint = 0 –filter by 0
select * from @t
where 1=1
AND (@Bucket is Null or @Bucket ='' or bucket=@Bucket)
Result
1
2
-1
5
但如果我按 2 或任何其他值过滤 Bucket,我会正确得到结果
declare @Bucket bigint = 2 –filter by 2
select * from @t
where 1=1
AND (@Bucket is Null or @Bucket ='' or bucket=@Bucket)
Result
2
如果我按 null 或空白过滤,我会得到正确的结果
declare @Bucket bigint = '' –filter by ''
select * from @t
where 1=1
AND (@Bucket is Null or @Bucket ='' or bucket=@Bucket)
Result
1
2
-1
5
为什么桶 0 会有这种行为?又该如何解决?
【问题讨论】:
标签: sql sql-server tsql parameters