可以用动态TSQL查询吗?

发布于 2024-09-03 20:14:39 字数 347 浏览 2 评论 0原文

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

我将避免长选择,例如 @c 和 @d 是过滤器参数

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

,只能同时过滤一个过滤器,但也可以禁用两个过滤器。每个 0 意味着参数被禁用,因此我可以使用其中的 where 语句创建 nvarchar...

我如何集成到此处的动态查询中,以便可以将“where”添加到正常查询中。我无法将所有查询添加为大 nvarchar,因为其中有太多需要更改的内容(即何时、子查询、联接)

I have very long select query which i need to filter based on some params, i'm trying to avoid having different stored procedures or if statements inside of single stored procedure by using partly dynamic TSQL...

I will avoid long select just for example sake

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

@c and @d are filter params, only one can filter at the same time but also both filters could be disabled. 0 for each of these means param is disables so i can create nvarchar with where statement in it...

How do i integrate in here dynamic query so 'where' can be added to normal query. I cannot add all the query as big nvarchar because there is too many things in it which will require changes ( ie. when's, subqueries, joins)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

洋洋洒洒 2024-09-10 20:14:39

怎么样:

SELECT a
FROM b
WHERE (@c IS NULL OR c = @c)
AND (@d IS NULL OR d = @d)

当您不使用过滤器时,将参数设置为NULL并且条件应该被短路。

How about something like:

SELECT a
FROM b
WHERE (@c IS NULL OR c = @c)
AND (@d IS NULL OR d = @d)

When you're not using the filter, set the parameter to NULL and the condition should be short-circuited.

深陷 2024-09-10 20:14:39

有点晚了但是

 SELECT a  FROM b    
  WHERE c = isNULL(@c, c)  AND d=  isNULL(@d, d)  

A little late but

 SELECT a  FROM b    
  WHERE c = isNULL(@c, c)  AND d=  isNULL(@d, d)  
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文