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

问题描述 投票:0回答:2

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

我必须在记录中添加一个可选的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语句中的逻辑运算符。

sql sql-server stored-procedures
2个回答
© www.soinside.com 2019 - 2024. All rights reserved.