如何基于布尔参数来调整我的选择

时间:2015-12-01 22:55:24

标签: sql sql-server parameters boolean

我正在创建一个存储过程,它应该根据布尔标志@status返回用户列表,如下所示:

  • 如果未通知status,则查询必须返回所有用户
  • 如果'status'作为true传递,则查询必须仅返回列LastAccessnot null的用户。
  • 如果status传递为false,则查询必须返回LastAccess列为null的用户。

此列的类型为datetime


我可以在第一个用例中处理,@status is null位于以下代码的最后一行:

CREATE PROCEDURE selectUsersByStatus (
    @userId int,
    @status bit     
    )

AS

SELECT * from users

WHERE users.id = @userId
and (@status is null or CASE @status WHEN 1 THEN (users.LastAccess is not null) ELSE (users.LastAccess is null))

然而,该线的其余部分显然不起作用。怎么办?

由于

1 个答案:

答案 0 :(得分:2)

尝试简单:

CREATE PROCEDURE selectUsersByStatus (
    @userId int,
    @status bit     
    )

AS

SELECT * from users

WHERE users.id = @userId
and (@status is null OR (@status = 1 AND users.LastAccess IS NOT NULL) OR (@status = 0 AND users.LastAccess IS NULL))