Sql WHERE子句中的IF语句
我的存储过程如下所示:Sql WHERE子句中的IF语句,sql,sql-server,Sql,Sql Server,我的存储过程如下所示: -- @intUserType int (Passed in from sproc) IF @intUserType = 1 BEGIN SELECT * FROM Users WHERE Users.isDeleted = 0 END IF @intUserType = 4 BEGIN SELECT * FROM Users WHERE Users.isDeleted = 0 AND Users.UserType <&g
-- @intUserType int (Passed in from sproc)
IF @intUserType = 1
BEGIN
SELECT * FROM Users
WHERE Users.isDeleted = 0
END
IF @intUserType = 4
BEGIN
SELECT * FROM Users
WHERE Users.isDeleted = 0
AND Users.UserType <> 1
END
IF @intUserType = 3
BEGIN
SELECT * FROM Users
WHERE Users.isDeleted = 0
AND Users.UserType IN (1,3,4)
END
我想缩短它,不使用那么多select语句,有点像:
SELECT * FROM Users
WHERE Users.isDeleted = 1
AND
IF @intUserType = 1
THEN Users.UserType > 0
ELSE IF @intUserType = 4
THEN Users.UserType <> 1
ELSE IF @intUserType = 3
THEN Users.UserType NOT IN(1,3,4)
END
END
谢谢你的帮助
Rob为了完整起见,这里有另一种方法。您可以构建CASE函数来计算WHERE子句中的多个表达式:
SELECT *
FROM Users
WHERE
CASE
WHEN @intUserType = 1 AND Users.isDeleted = 0 THEN 1
WHEN @intUserType = 4 AND Users.isDeleted = 0 AND Users.UserType <> 1 THEN 1
WHEN @intUserType = 3 AND Users.isDeleted = 0 AND Users.UserType IN (1,3,4) THEN 1
ELSE 0
END = 1;
SELECT * FROM Users
WHERE Users.isDeleted = 0 AND
(
(@intUserType = 1) OR
(@intUserType = 4 AND Users.UserType <> 1) OR
(@intUserType = 3 AND Users.UserType IN (1,3,4))
)
SELECT *
FROM Users
WHERE
CASE
WHEN @intUserType = 1 AND Users.isDeleted = 0 THEN 1
WHEN @intUserType = 4 AND Users.isDeleted = 0 AND Users.UserType <> 1 THEN 1
WHEN @intUserType = 3 AND Users.isDeleted = 0 AND Users.UserType IN (1,3,4) THEN 1
ELSE 0
END = 1;