2014-03-19 51 views
0

使用SQL Server 2008.我的存儲過程中有一個輸入參數,名爲'@State'。參數基本上可以是'--All--'或者可以包含要過濾的狀態。T-SQL:WHERE子句 - 如何根據輸入變量進行調整

所以,如果它是'--All--'我不想將@State合併到where子句中。否則,我希望它基於提供的@State進行過濾。所以基本上它可能會導致這個....

SELECT * FROM MyTable 
WHERE Type='AAA' AND [email protected] 

,或者,如果他們通過「--All--」

SELECT * FROM MyTable 
WHERE Type='AAA' 

我怎麼能在一個存儲過程做到這一點?

回答

3
SELECT 
    * 
FROM 
    MyTable 
WHERE 
    Type='AAA' 
    AND Status = CASE @Status WHEN '--All--' THEN Status ELSE @Status END 
1

我以爲你犯了一個錯字。它應該是@State,而不是@Status。這個簡單的查詢可能不是您要查找的內容,因爲您希望在您的需求中使用兩個sql語句。

SELECT * FROM MyTable 
WHERE Type='AAA' AND (@State='--All--' or [email protected]) 
0

或者......

,你可以把它比更簡單:

SELECT * FROM MyTable 
WHERE Type='AAA' AND @State in ('--All--', State) 

沒有必要做一個存儲過程,除非絕對必要(或者,如果業務/編碼練習要求你這樣做)。

相關問題