2011-06-02 182 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)