【问题标题】:Syntax error on multiple CASE多个 CASE 的语法错误
【发布时间】:2018-07-27 21:57:30
【问题描述】:

我有一个这样的存储过程:

DECLARE @comando as varchar(5000)

SET @comando = 'DTEXEC  /FILE \"" /de "pass" /CHECKPOINTING OFF  /REPORTING EW'
SELECT @comando = @comando + ' /SET "\"\Package.Variables[' + Replace(str_NombreVariable,'User::','') + '].Value\"";' 
   + CASE WHEN str_NombreVariable LIKE '%v_sCadenaConexion%'
          THEN '"\"'+ str_ValorVariable +'\""' 
              ELSE str_ValorVariable + 
               CASE WHEN str_NombreVariable LIKE '%v_sRutaArchivo%' 
                    THEN @v_sRutaArchivo + '.csv\""' 
                    ELSE '' 
               END 
          END + ''
from [Catalogo].[catVariablesEtl] where IdPaquete = @idPaquete

我想为另一个案例添加另一个验证,所以我尝试:

SELECT @comando = @comando + ' /SET "\"\Package.Variables[' + Replace(str_NombreVariable,'User::','') + '].Value\"";' 
   + CASE WHEN str_NombreVariable LIKE '%v_sCadenaConexion%'
   + CASE WHEN str_NombreVariable LIKE '%v_sRutaArchivo%'
          THEN '"\"'+ str_ValorVariable +'\""' 
              ELSE str_ValorVariable + 
               CASE WHEN str_NombreVariable LIKE '%v_sRutaArchivo%' 
                    THEN @v_sRutaArchivo + '.csv\""' 
                    ELSE '' 
               END 
          END + ''
from [Catalogo].[catVariablesEtl] where IdPaquete = @idPaquete

我明白了

“来自”附近的语法不正确

我做错了什么?如果我添加另一个CASE,我需要添加另一个 THEN 句吗?问候

作为缺少声明的评论,我将其更改为:

更新:

SELECT @comando = @comando + ' /SET "\"\Package.Variables[' + Replace(str_NombreVariable,'User::','') + '].Value\"";' 
   + CASE WHEN str_NombreVariable LIKE '%v_sCadenaConexion%'  
          THEN '"\"'+ str_ValorVariable +'\""' 
          + CASE WHEN str_NombreVariable LIKE '%v_sRutaArchivo%'
          THEN'"\"' +str_ValorVariable +'' 
              ELSE str_ValorVariable + 
               CASE WHEN str_NombreVariable LIKE '%v_sRutaArchivo%' 
                    THEN @v_sRutaArchivo + '.csv\""' 
                    ELSE '' 
               END 
                 END
          END + ''
from [Catalogo].[catVariablesEtl] where IdPaquete = @idPaquete

但是当我进行选择时,它会返回 NULL 值。为什么会这样?

【问题讨论】:

  • 您有三个CASE 语句和两个END 关键字。
  • 我更新了我的问题,你能看看吗? @bjones
  • 您可能会得到空值,因为一个或多个列具有空值。任何加上NULL 将导致NULL。也许您需要在列周围使用ISNULL() 以查看导致问题的原因。
  • 我认为问题是因为Case 没有Else 子句或者它不匹配?@bjones

标签: sql sql-server stored-procedures


【解决方案1】:

您可以使用CONCAT() 将多个表达式连接在一起:。

由于不需要else 部分的case when 逻辑,我已经编辑了您的案例逻辑。

SELECT @comando = CONCAT ( @comando , ' /SET "\"\Package.Variables[' , 
                           Replace(str_NombreVariable,'User::','') , '].Value\"";', 
                           CASE WHEN str_NombreVariable LIKE '%v_sCadenaConexion%'  
                                THEN '"\"'+ str_ValorVariable +'\""' 
                                WHEN str_NombreVariable LIKE '%v_sRutaArchivo%'
                                THEN'"\"' +str_ValorVariable +@v_sRutaArchivo+'.csv""' 
                                ELSE str_ValorVariable                 
                            END 
                        )
FROM 
     [Catalogo].[catVariablesEtl] where IdPaquete = @idPaquete

阅读更多关于CASE 表达式Here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-09
    • 1970-01-01
    • 2017-09-16
    • 1970-01-01
    相关资源
    最近更新 更多