【问题标题】:Is it possible with dynamic TSQL query?是否可以使用动态 SQL 查询?
【发布时间】:2010-06-03 09:11:25
【问题描述】:

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

为了举例,我会避免长选择

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

@c 和@d 是过滤器参数,只能同时过滤一个,也可以禁用两个过滤器。 0 表示这些参数中的每一个都被禁用,因此我可以创建带有 where 语句的 nvarchar...

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

【问题讨论】:

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


    【解决方案1】:

    怎么样:

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

    不使用过滤器时,将参数设置为NULL,条件应短路。

    【讨论】:

    • omg,,,, 为什么有些人这么聪明......只是一个小问题,我如何从 ASP.NET 传递带有 null 的 SqlParam 而不会出现异常?这就是我设置参数的方式: adp.SelectCommand.Parameters.Add("@c", SqlDbType.TinyInt).Value = someValue;
    • 无值时不要设置参数值。
    【解决方案2】:

    有点晚了,但是

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

    【讨论】:

      猜你喜欢
      • 2018-10-21
      • 2016-10-03
      • 2012-03-07
      • 1970-01-01
      • 2019-04-12
      • 2011-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多