2012-11-01 52 views
0

我在SP下的Where Clause.Query中使用了SWITCH語句似乎很好,但我無法理解爲什麼它給了我錯誤。 查詢:SQL中的Switch語句中出錯

Select * from Customer 
WHERE ([email protected] OR @ISClose is NULL) 
AND  
(C.FirstName like '%'[email protected]+'%' or @ClientName is NULL)  
AND 
CASE @abc 
     WHEN 2 THEN [email protected] or @Total is NULL 
     WHEN 3 THEN I.RecurringCharge like 
           '%'+cast(@Total as varchar(50))+'%' 
        or @Total is NULL 
    END 

的代碼是不完整的,但能夠充分理解試圖編譯時的疑難問題。我收到以下錯誤消息。

Incorrect syntax near '='. 

錯誤在下面一行。

WHEN 2 THEN [email protected] or @Total is NULL 

請高手幫幫我。

在此先感謝。

+1

T-SQL'CASE'語句只能** **返回(原子)值(如1,'Hello') - 不是整個**代碼塊**或表達式... –

+0

但這是我的要求基於@abc返回如上所述。 我可以修復它,或者沒有解決方案嗎? –

+0

我不明白你想做什麼 - 在你的'WHERE'子句中間,你試圖分配變量和東西..... –

回答

2

請參閱the documentation of the CASE sattement

而不是CASE <variable> WHEN <value> ...您應該使用CASE WHEN <variable>=<value> ...

就你而言,你最好不要使用CASE。嘗試重寫這樣的條件,而不是

Select * from Customer 
WHERE ([email protected] OR @ISClose is NULL) 
AND (C.FirstName like '%'[email protected]+'%' or @ClientName is NULL)  
AND (@Total is NULL OR 
      (
       (@abc = 2 and [email protected]) 
       OR 
       (@abc = 3 and I.RecurringCharge like '%'+cast(@Total as varchar(50))+'%') 
      ) 
     ) 

我縮進條件只是爲了清楚它們如何應用。我還列出了常見的OR @Total is NULL條件。

+0

在使用此模式之前,請務必閱讀Gail Shaw的[Catch All Queries](http://csqlinthewild.co.za/index.php/2009/03/19/catch-all-queries/)。 –