如何根据布尔参数调整我的 select
How to condition my select based on boolean parameter
我正在创建一个存储过程,它应该 return 基于布尔标志 @status
的用户列表,如下所示:
- 如果
status
没有通知,查询必须return所有用户
- 如果 'status' 作为
true
传递,查询必须 return 只有列 LastAccess
为 not null
的用户。
- 如果
status
作为 false 传递,查询必须 return 列 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))
然而,该行的其余部分显然不起作用。如何进行?
谢谢
尝试简单:
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))
我正在创建一个存储过程,它应该 return 基于布尔标志 @status
的用户列表,如下所示:
- 如果
status
没有通知,查询必须return所有用户 - 如果 'status' 作为
true
传递,查询必须 return 只有列LastAccess
为not null
的用户。 - 如果
status
作为 false 传递,查询必须 return 列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))
然而,该行的其余部分显然不起作用。如何进行?
谢谢
尝试简单:
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))