2017-08-08 82 views
2

我有下面的sql .. @ FeeType是存儲過程的一個參數..當我調用下面的邏輯時我得到一個錯誤..如果我刪除和條件並使邏輯只是和Case語句在SQL Server中的條件

WHEN ''ItemDesc'' THEN ''Item Description1'' 

那麼邏輯工作fine..Can有人請看看,讓我知道我在做什麼錯在這裏。

SELECT @FIELDS = (COALESCE(@FIELDS, '' '','''') + ''<td style='' + 
        ''"border:1px solid black;color:white">'' + 
        (CASE name 
        WHEN ''ItemDesc'' and '+ @FeeType +' = ''1'' THEN ''Item Description1'' 
        WHEN ''ItemDesc'' and '+ @FeeType +' = ''2'' THEN ''Item Description2'' 
        WHEN ''Units'' THEN ''Units'' 
        WHEN ''Rate'' THEN ''Rate'' 
        WHEN ''Frequency'' THEN ''Frequency'' 
        WHEN ''Annual'' THEN ''Annual'' 
        WHEN ''BasedOn'' THEN ''Based On'' ELSE ''Misc'' END) + ''</td>'' 
       ) 

FROM tempdb.sys.Columns 
WHERE object_id=object_id(''tempdb..#FeesCalculation'') 
AND name not like ''CustColHTML_ID'' 
AND name not like ''ItemID'' 

感謝

+0

爲什麼你每次使用兩個單引號兩次?這是一個動態查詢嗎? –

+0

對不起忘了提及它..是的 – user1221989

+0

你可以發佈完整的查詢 –

回答

2

因爲CASE有兩種不同的可能的語法:

  1. CASE variable WHEN value1 THEN expression2 WHEN value2 THEN expression2 [...] ELSE expression3 END
  2. CASE WHEN condition1 THEN expression1 ELSE expression2 END

第一種是當你只需要比較值。如果你需要更復雜的邏輯,你應該使用第二個選項。在你的情況下,你可以使用兩種第一種語法的組合。

所以,你需要做的是:

SELECT @FIELDS = (COALESCE(@FIELDS, '' '','''') + ''<td style='' + 
        ''"border:1px solid black;color:white">'' + 
        (CASE name 
        WHEN ''ItemDesc'' THEN CASE @FeeType WHEN ''1'' THEN ''Item Description1'' WHEN ''2'' THEN ''Item Description2'' END 
        WHEN ''Units'' THEN ''Units'' 
        WHEN ''Rate'' THEN ''Rate'' 
        WHEN ''Frequency'' THEN ''Frequency'' 
        WHEN ''Annual'' THEN ''Annual'' 
        WHEN ''BasedOn'' THEN ''Based On'' ELSE ''Misc'' END) + ''</td>'' 
       ) 

你可能會需要修復的級聯和報價,我把他們趕走了簡單性。