带有WHERE子句逻辑的SQL Server存储过程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带有WHERE子句逻辑的SQL Server存储过程相关的知识,希望对你有一定的参考价值。

我在我的应用程序中有一个结果表和一个允许用户按一个或多个值过滤结果集的框。

我必须在记录中添加一个可选的needBy日期,以便一个人可以指定他们是否需要在特定日期处理请求。

我正在努力的部分是过滤可选的日期结构。我的过滤器如下:

  • Current =所有按日期需求小于或等于今天的请求
  • 未来=所有需求按日期大于今天
  • 全部=按日期提供和不提供所有请求

这是我的查询示例。 WHERE对于一切都期望@needBy工作得很好。

SELECT 
    * 
FROM 
    TABLE
WHERE 
    (@requestor IS NULL OR r.Requestor = @requestor) 
    AND
    (@user IS NULL OR t.QID = @user)
    AND
    (@tool IS NULL OR t.ToolID = @tool)
    AND
    (@role IS NULL OR t.RoleID = @role)
    AND
    (@action IS NULL OR t.ActionID = @action)
    AND
    (@status IS NULL OR t.StatusID = @status)
    AND
    (@needBy IS NULL OR CASE 
                            WHEN @needBy = 'current' THEN r.NeedByDate <= GETUTCDATE()
                            WHEN @needBy = 'future' THEN r.NeedByDate > GETUTCDATE()
                            WHEN @needBy = 'all' THEN r.NeedByDate IS NOT NULL
                        END)

我应该如何针对日期不同地处理此查询?另外一个问题是@needBy = 'all'。在这种情况下,我需要所有记录,无论它们在将来有什么日期,过去或者根本没有。

在上面的代码中,它似乎不像WHEN/THEN语句中的逻辑运算符。

以上是关于带有WHERE子句逻辑的SQL Server存储过程的主要内容,如果未能解决你的问题,请参考以下文章

WHERE 子句中的 OR 会降低 sql 查询性能(sql server)

SQL Server 中带条件的 Where 子句

带有可选 Where 子句和 Sql Server CE 的 Linq

SQL Server If 条件在 where 子句?

带有两个日期列的 sql 查询“where 子句”

WHERE IS NULL、IS NOT NULL 或 NO WHERE 子句取决于 SQL Server 参数值