我正在创建一个存储过程,它应该根据布尔标志@status
返回用户列表,如下所示:
status
,则查询必须返回所有用户true
传递,则查询必须仅返回列LastAccess
为not 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))
然而,该线的其余部分显然不起作用。怎么办?
由于
答案 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))