我有一个名为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代理作业的用户没有正确的权限(在我的示例中,它是由我将数据读取到的数据库上的sysadmin运行的,以及msdb和SSISDB)。
发布于 2017-12-20 22:09:45
只有在使用项目部署模型部署包时,SSIS才会使用项目参数。如果使用的是包部署模型,则应该将包更改为使用配置而不是项目参数。
https://stackoverflow.com/questions/47903302
复制相似问题