带有case语句的SQL where子句

时间:2011-06-02 11:14:38

标签: sql stored-procedures case where-clause

我有一个SQL问题,我还没有找到解决方案,我试图做的是一个过程的where子句,其中userID变量可以包含有效的userID或-1来指示所有用户。< / p>

但是我坚持在where子句的这一部分:

AND usertable.userid = CASE WHEN @user = -1
THEN

ELSE
  @user
END

我不知道如何处理-1来说出选择所有用户

由于

4 个答案:

答案 0 :(得分:5)

也许以下方法可行:

SELECT whatever
  FROM wherever
  WHERE something = somethingelse AND
        usertable.userid = CASE @user
                             WHEN -1 THEN usertable.userid
                             ELSE @user
                           END

分享并享受。

答案 1 :(得分:5)

您可以更改此类子句以返回所有用户...

AND ( @user = -1 
    OR usertable.userid = @user
)

不需要这样的案例陈述......

答案 2 :(得分:1)

你能否把整个思想放在if语句中......

这样的东西
if (@userId = -1)
    SELECT * FROM usertable
else
    SELECT * FROM usertable WHERE Id = @userId

答案 3 :(得分:1)

usertable.userid = COALESCE(NULLIF(@user, -1), usertable.userid)