2012-09-11 18 views
0

我需要我的幫助查詢:當@Param = -1中陳述過濾

當我發送給查詢使用值-1的參數,我想與過濾「IN」語句,否則根據價值過濾。

我試圖做這樣的事情:

WHERE (StatusId = CASE WHEN @StatusId = - 1 
     THEN 
     @StatusId IN (1, 2, 3) 
     ELSE 
     StatusId = @StatusId END) 

感謝。

+1

'CASE'是*表達*有返回的值具體類型。如果你去搜索,你會發現SQL Server沒有'boolean'數據類型... –

回答

1

我認爲你必須在你的例子一個錯字,如下:

WHEN @StatusId = - 1 THEN @StatusId IN (1, 2, 3) 

...什麼都不會做,因爲如果@StatusId = -1,它不會是in (1, 2, 3)

Anywhos,你可以只使用OR和嵌套的括號:

WHERE (StatusId IN (1, 2, 3) AND @StatusId = -1) 
     OR (StatusId = @StatusId AND @StatusId <> -1) 
+0

非常感謝。 – Eyal

1

你不需要爲這個CASE聲明,你可以只使用一個WHERE條款:

WHERE 
(
    @StatusId = -1 AND StatusId IN (1, 2, 3) 
) 
OR 
(
    StatusId = @StatusId AND @StatusId <> -1 
) 
1

無需使用CASE。您可以直接像這樣做:

WHERE 
(@StatusId = -1 AND StatusId IN (1, 2, 3)) 
OR 
(StatusId = @StatusId AND @StatusId <> -1) 

或者如果你想使用CASE你可以這樣做:

WHERE StatusId IN 
(CASE @StatusId 
WHEN -1 THEN 1,2,3 
ELSE @StatusId 
END)