【问题标题】:SSISDB package errs out, says variable does not existSSISDB 包出错,说变量不存在
【发布时间】:2019-10-31 13:40:29
【问题描述】:

我有一个 SSIS 包,它从数据库写入 csv 文件,将它们复制到几个位置,然后通过电子邮件发送成功消息。流程是:

  1. 从数据库中检索公共文件位置到变量@[User::varSQLCSVOutputFolder]
  2. 遍历数据库记录列表:
    • 为每个文件创建一个本地 CSV。
    • 将本地文件复制到@[User::varSQLCSVOutputFolder]中的位置
  3. 使用 @[User:varEmailBody] 中定义的 MessageSource 发送电子邮件。
@[User::varEmailBody] = "Files successfully saved to " + @[User::varCNNTargetCSVFolder]

@[User::varCNNTargetCSVFolder] = @[User::varSQLCSVOutputFolder]

@[User::varSQLCSVOutputFolder] 从数据库加载,值 = \\server.domain.com\TEST\Output Files AM

(确认一下,@[User::varCNNTargetCSVFolder] 只是一个通道)

我可以在设计时确认表达式流过。但是当我从 SSISDB 执行它时,我得到了错误

错误:发生错误并显示以下错误消息:

Failed to lock variable "Files successfully saved to
\\server.domain.com\TEST\Output Files AM"  for read access with error
0xC0010001 The variable cannot be found.  This occurs when an attempt
is made to retrieve a variable from the  Variables collection on a
container during execution of the package, and  the variable is not
there.  The variable name may have changed or the variable is not
being created.

我认为转义反斜杠可能是一个奇怪的问题,但我尝试在表达式中使用REPLACE(),但没有运气。我确实重复使用了基础变量@[User::varSQLCSVOutputFolder],但是我设置了先例约束,所以应该没有重叠......还有其他可能性吗? 它似乎正在读取我的变量的内容作为变量的名称。

【问题讨论】:

  • 我不确定这里发生了什么,但如果您只是在复制文件,我建议您使用 Robocopy 或 Powershell....但我知道设计决策是出于各种原因做出的。如果你想调试你拥有的东西,我建议你把它剥离到基础,直到你发现问题。我目前也有一个关于 SSIS 变量的奇怪问题,我花了很多时间解决了这个问题。结论 - SSIS 变量不适合调试。

标签: sql-server csv ssis etl flat-file


【解决方案1】:

好的,这很有趣。因此,我为 MessageSource 定义了一个表达式,但是,我选择了 MessageSourceType 作为变量,而不是直接输入。后人见下文。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-26
    相关资源
    最近更新 更多