2017-08-08 7 views
2

以下のsql .. @ FeeTypeはストアドプロシージャのパラメータです。以下のロジックを呼び出すとエラーが発生します。ロジックはちょうどケースステートメントIN 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

なぜ2つのシングルクォーテーションを2度使用しましたか?これは動的クエリですか? –

+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

あなたは、単に値を比較する必要があるときに最初のものはあります。複雑なロジックが必要な場合は、おそらく2番目のオプションを使用してください。あなたの場合、最初の構文の2つの組み合わせを使用することができます。

だから、何をする必要がある:

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>'' 
       ) 

はおそらく、私は簡単にするためにそれらを削除し、連結と引用符を修正する必要があります。