Sql 如何根据布尔参数调整我的选择
我正在创建一个存储过程,它将根据布尔标志Sql 如何根据布尔参数调整我的选择,sql,sql-server,parameters,boolean,Sql,Sql Server,Parameters,Boolean,我正在创建一个存储过程,它将根据布尔标志@status返回用户列表,如下所示: 如果未通知状态,则查询必须返回所有用户 如果“状态”传递为true,则查询必须仅返回列LastAccess为notnull的用户 如果status被传递为false,则查询必须返回用户LastAccess列为null 此列的类型为datetime 我可以处理第一个用例,在下面代码的最后一行中,@状态为null: CREATE PROCEDURE selectUsersByStatus ( @userId
@status
返回用户列表,如下所示:
- 如果未通知
,则查询必须返回所有用户状态
- 如果“状态”传递为
,则查询必须仅返回列true
为LastAccess
的用户notnull
- 如果
被传递为false,则查询必须返回用户status
列为LastAccess
null
datetime
我可以处理第一个用例,在下面代码的最后一行中,
@状态为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))