我有下面的sql .. @ FeeType是存储过程的一个参数。当我调用下面的逻辑时我收到一个错误..如果我删除了和条件并使逻辑只是
WHEN ''ItemDesc'' THEN ''Item Description1''
然后逻辑工作正常。有人请看看,让我知道我在这里做错了什么。
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)
因为CASE
有两种不同的可能语法:
CASE variable WHEN value1 THEN expression2 WHEN value2 THEN expression2 [...] ELSE expression3 END
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>''
)
您可能需要修复连接和引号,为简单起见,我将其删除。