2014-10-06 27 views
0

我在SQL Server 2008中有一個存儲過程,用於從表中獲取數據。SQL Server:如何處理Where子句中的兩個不同情況

我的輸入參數爲:

@category nvarchar(50) = '', 
@departmentID int 

我的WHERE子句:

WHERE  A.departmentID = @departmentID 
AND   A.category = @category 

有什麼辦法,我可以申請一個Case語句(或類似的東西),這在哪裏子句說它應該只檢查類別匹配,如果@category不是'',並且否則選擇所有類別

我唯一能想到的就是使用以下內容。從技術上講,這工作,但我不能檢查確切的類別匹配這是必需的:

WHERE  A.departmentID = @departmentID 
AND   A.category LIKE '%'[email protected]+'%' 

非常感謝任何幫助,蒂姆。

回答

2

你可以修改你WHERE條款如下:

WHERE A.departmentID = @departmentID 
    AND (@category = '' or A.category = @category) 
+0

這是完美的 - 正是我所期待的。非常感謝 - 我會盡快接受! :) – user2571510 2014-10-06 08:44:38

2
WHERE A.departmentID = @departmentID 
    AND ((@category = '') or (@category <> '' AND A.category = @category)) 

這應該給你你想要的結果集是什麼,它基本上做的是坯類則應該返回所有結果的部門ID或只是在參數中指定的類別進行檢查。

+0

感謝您的支持!剛纔看到,在我的情況下,其他答案就足夠了,因爲分類中的分類不能爲空。 – user2571510 2014-10-06 08:44:09

0

嘗試這樣

if(LTRIM(RTRIM(@category))='') --if string is empty then set it to NULL 
set @category=NULL 

select * from tbl_name A 
WHERE  A.departmentID = @departmentID 
AND   A.category = @category 
(AND   A.category LIKE '%'[email protected]+'%' OR @category IS NULL) 

這裏,如果我們指定NULL,右側OR條件將返回true 因此它給出正確的結果如果我們指定@category NULL OR ''(空)

+0

爲什麼downvotes ??評論請 – 2014-10-06 08:46:26

+0

這不是我。 – user2571510 2014-10-06 08:46:58

+0

@ialarmedalien更新了答案 – 2014-10-06 09:13:10

0

如果您從f ront-end

WHERE A.departmentID = @departmentID 
    AND ((isnull(@category,'') = '' or A.category = @category)