我有一个从SQL Server 2012中的视图返回的大型数据集。我需要根据6个不同的标准过滤数据。我在报告中设置了参数,并希望使用查询中的参数来减小大小 所以我有以下情况:
select * from vw_ABC where p1 in @p1 and p2 in @p2 ...
棘手的部分是如何处理用户不想过滤其中一个标准的情况。我试图避免动态sql,但如果这是唯一的方式,那么它
调用报告时,用户将列出所有6个参数。默认值为' ALL'。他们可以使用一个或所有参数创建报告。大多数情况下它将是2或3(名称城市邮编orderid事情这样)
任何帮助将不胜感激。
答案 0 :(得分:0)
我想你不是在谈论IN
而是谈论=
。那将是:
select *
from vw_ABC
where (p1 = @p1 or @p1 = 'ALL')
and (p2 = @p2 or @p2 = 'ALL')
...
答案 1 :(得分:0)
一种方法是创建第二组参数,以指示是否需要使用相应的参数:
SELECT *
FROM vw_ABC
WHERE
(@u1=0 OR p1=@p1)
AND (@u2=0 OR p2=@p2)
AND (@u3=0 OR p3=@p3)
这样您就不需要保留一个特殊值来表示 all :如果您想使用@pX
,请将@uX
设置为1
,其中X
是参数编号。
答案 2 :(得分:0)
将参数设置为可选并检查NULL ....让我为您挖掘一个示例
declare @id int = 1
select * from users u
where (@id IS NULL and u.id=u.id) or (u.id=@id)