【问题标题】:Failed to lock variable $Project::Databases未能锁定变量 $Project::Databases
【发布时间】:2017-12-20 09:59:37
【问题描述】:

我有一个名为Databases 的项目参数,它是数据类型为String 的SSIS 中的Project 参数。变量本身包含一个硬编码的 XML 文档,即:

<dbs>
    <data>
      <db>database1</db>
      <store>store1</store>
    </data>
    <data>
      <db>database2</db>
      <store>store2</store>
    </data>
</dbs>

我在 SSIS 的 foreach loop 中使用它,我在其中迭代这些数据库和相应的存储。

我的foreach循环配置为:

DocumentSourceType: Variable
DocumentSource: $Project::Databases
EnumerationType: ElementCollection
OuterXPathStringSourceType: DirectInput
OuterXPathString: /dbs/*
InnerElementType: NodeText
InnerXPathStringSourceType: DirectInput
InnerXPathString: *

然后我使用Variable Mappings 让索引0 对应于变量User::DatabaseName 和索引1 对应于User::StoreKey

当我从SSIS 执行包时,这工作。我对这些值使用的 SQL 语句变量给出了正确的输出等。

问题是当我尝试使用 SQL Agent Job 执行此操作时,我收到错误:

未能锁定变量“$Project::Databases”以进行读取访问,错误为 0xC0010001“找不到变量”。如果在执行包期间尝试从容器上的变量集合中检索变量,但该变量不存在,则会发生这种情况。变量名称可能已更改或未创建变量

但变量应该被创建——毕竟它只是一个硬编码变量。

当我用谷歌搜索这个问题时,可能的解决方案是:

变量不是字符串类型(在我的情况下是

从中执行 SQL 代理作业的用户没有正确的权限(在我的情况下,它是由我读取数据的数据库上的系统管理员运行的,msdb 和 SSISDB)。

【问题讨论】:

  • 您使用的是什么部署模型?
  • @digital.aaron 我只需通过右键单击它们并在 Visual Studio SSIS 2016 中选择 Deploy package... 来部署每个包。测试另一个部署选项似乎合乎逻辑。我应该部署整个项目而不是每个包吗?我目前无法测试,因为我无法在家中访问环境。

标签: variables ssis sql-agent-job


【解决方案1】:

仅当使用项目部署模型部署包时,SSIS 才会使用项目参数。如果您使用的是包部署模型,您应该更改您的包以使用配置而不是项目参数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-25
    • 1970-01-01
    • 1970-01-01
    • 2017-11-01
    • 1970-01-01
    • 2012-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多