【问题标题】:SQL Server stored procedures, returning multiple value in Else statement inside CASE clauseSQL Server存储过程,在CASE子句内的Else语句中返回多个值
【发布时间】:2012-06-13 06:48:31
【问题描述】:

我想在 where 子句中使用 CASE 和 IN 子句

  • 当用户状态 = 1 时,CASE 应返回 1
  • 当用户状态 = 2 时,CASE 应返回 2
  • 当用户状态 = 3 时,CASE 应返回 3
  • 当 User.Status = NULL 时,它应该显示所有状态为 1、2 和 3 的用户

但是下面的查询抛出了一个语法错误。

查询:

SELECT *
FROM User
where isInternalUser = 0 and DeleteMark <> 1 and
User.Status IN 
(
   CASE @UserStatus          // case for UserStatus
       WHEN 0 THEN 0
       WHEN 1 THEN 1
       WHEN 2 THEN 2
       ELSE (0,1,2)           
    END                      
)

谁能帮帮我..

谢谢, 阿尼什

【问题讨论】:

  • 您不能从 CASE 的一个分支返回单个 int (0),也不能从另一个分支返回整个 int 列表。

标签: stored-procedures in-clause


【解决方案1】:

尝试不使用CASE 语句,但检查是否@UserStatus IS NULL

SELECT *
FROM User
WHERE isInternalUser = 0 AND DeleteMark <> 1 AND (
    (@UserStatus IS NOT NULL AND Status = @UserStatus)
    OR (@UserStatus IS NULL AND Status IN (0, 1, 2))
)

【讨论】:

    【解决方案2】:
    User.Status IN 
    (
        SELECT s FROM (
            SELECT 1 s union SELECT 2 s union SELECT 3 s
        ) a
        WHERE @UserStatus is null or @UserStatus = s
    )
    

    【讨论】:

    • 谢谢,但语法错误仍然存​​在。 ELSE 语句中 ',' 附近的语法不正确
    • @user1437112 我猜你不能使用 case 语句来做到这一点。请参阅我的更新以了解替代方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多