Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql WHERE子句中的IF语句_Sql_Sql Server - Fatal编程技术网

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;