和SQL语句中的Case语句中的条件

时间:2017-08-08 03:58:40

标签: sql sql-server case dynamic-sql

我有下面的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'' 

由于

1 个答案:

答案 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
  3. 第一个是你只需要比较价值。如果您需要更复杂的逻辑,您应该使用第二个选项。在您的情况下,您似乎可以使用第一种语法中的两种组合。

    所以,你需要做的是:

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

    您可能需要修复连接和引号,为简单起见,我将其删除。