我有很长的选择查询,我需要根据一些参数进行过滤,我试图通过使用部分动态TSQL来避免在单个存储过程中使用不同的存储过程或if语句...
我会避免长期选择只是为了清酒
select a
from b
where c=@c
or d=@d
@c和@d是过滤器参数,只有一个可以同时过滤,但也可以禁用这两个过滤器。对于每个这些意味着param是禁用的0,所以我可以创建nvarchar with where语句...
如何在此处集成动态查询,以便'where'可以添加到普通查询中。我无法将所有查询添加为大nvarchar,因为其中有太多东西需要更改(即。何时,子查询,连接)
答案 0 :(得分:5)
如下:
SELECT a
FROM b
WHERE (@c IS NULL OR c = @c)
AND (@d IS NULL OR d = @d)
当您不使用过滤器时,请将参数设置为NULL
并且条件应该短路。
答案 1 :(得分:0)
有点晚了但是
SELECT a FROM b
WHERE c = isNULL(@c, c) AND d= isNULL(@d, d)