【问题标题】:And condition in Case Statement IN SQL Server和条件在 SQL Server 中的 Case 语句中
【发布时间】:2017-08-08 03:58:39
【问题描述】:

我有以下 sql..@FeeType 是存储过程的参数..当我调用以下逻辑时出现错误..如果我删除 and 条件并使逻辑只是

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

谢谢

【问题讨论】:

  • 为什么你在任何地方都使用了两次单引号?这是动态查询吗?
  • 抱歉忘记提了..是的
  • 你能发布完整的查询吗

标签: sql sql-server case dynamic-sql


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2012-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-01
    • 2016-04-02
    • 1970-01-01
    • 2020-06-24
    相关资源
    最近更新 更多