2017-08-08 38 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>'' 
       ) 

你可能会需要修复的级联和报价,我把他们赶走了简单性。