【问题标题】:SQL Server stored procedure dynamic SQL in WHERE clauseSQL Server 存储过程动态 SQL in WHERE 子句
【发布时间】:2015-08-11 20:36:59
【问题描述】:

我编写了一个接受一个参数的存储过程。

Request_ID int = 0

稍后,在我的WHERE 子句中,我需要完成以下操作。

我不知道如何描述它,但你可以看到我试图用这个完全虚构的伪代码做什么:

WHERE isNull(a.Target_Department, '') <> ''
  AND isNull(a.Resolved_Date, '') = ''
  AND isNull(c.Request_Archived, '') <> 'Y'
  AND IF @Request_ID = 0 
        THEN Request_ID > 0 
        ELSE Request_ID = @Request_ID
    END

基本上,如果提供了特定的 request_ID,我希望 WHERE 子句缩小到仅特定的 Request_ID。否则,我想要所有这些。

关于如何实现这一点的任何想法?

【问题讨论】:

    标签: sql sql-server tsql where-clause


    【解决方案1】:

    试试这个 -->

    WHERE
        (@Request_ID IS NULL OR Request_ID=@RequestID)
    

    WHERE
        (@Request_ID=0 OR Request_ID=@RequestID)
    

    【讨论】:

    • 就是这样!上周我对另一个问题得到了几乎相同的答案。我有时不会将两个“AND”选项视为可以单独测试的两个独立条件。而且我也不知道您可以在查询的 where 子句中针对表测试变量。
    【解决方案2】:
    and isnull(nullif(@RequestId,0),RequestId)=RequestId
    

    【讨论】:

      猜你喜欢
      • 2014-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-13
      • 1970-01-01
      • 1970-01-01
      • 2014-03-30
      • 2015-11-21
      相关资源
      最近更新 更多