2011-06-02 180 views
1

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

但即时通讯卡在where子句中的这一部分:

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

ELSE 
    @user 
END 

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

感谢

回答

5

也许下面将工作:

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

分享和享受。

+0

非常感谢您的工作。 – Purplegoldfish 2011-06-02 11:22:59

5

你可以改变这样的条款返回所有用户...

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

无需case语句这样的......

1

你能不能把整个认为if语句...

喜欢的东西

if (@userId = -1) 
    SELECT * FROM usertable 
else 
    SELECT * FROM usertable WHERE Id = @userId 
+0

不幸的是,这个程序有大约6个参数,而且4个使用相同的CASE语句,所以IF最终会变成巨大的:( – Purplegoldfish 2011-06-02 11:29:32

+0

啊公平的玩法,我没有意识到 – NinjaNye 2011-06-02 11:31:05

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