是否可以使用动态SQL查询?

时间:2010-06-03 09:11:25

标签: asp.net sql-server ado.net

我有很长的选择查询,我需要根据一些参数进行过滤,我试图通过使用部分动态TSQL来避免在单个存储过程中使用不同的存储过程或if语句...

我会避免长期选择只是为了清酒

select a
from b
where c=@c
or d=@d

@c和@d是过滤器参数,只有一个可以同时过滤,但也可以禁用这两个过滤器。对于每个这些意味着param是禁用的0,所以我可以创建nvarchar with where语句...

如何在此处集成动态查询,以便'where'可以添加到普通查询中。我无法将所有查询添加为大nvarchar,因为其中有太多东西需要更改(即。何时,子查询,连接)

2 个答案:

答案 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)