无法锁定变量 $Project::Databases
Failed to lock variable $Project::Databases
我有一个名为 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
执行此操作时出现错误:
Failed to lock variable "$Project::Databases" 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
但是应该创建变量——毕竟它只是一个硬编码变量。
当我用谷歌搜索这个问题时,可能的解决方案是:
变量不是字符串类型(在我的例子中是)
或
执行 SQL 代理作业的用户没有正确的权限(在我的例子中,它是由系统管理员在数据库上 运行我将数据读取到 msdb 和 SSISDB)。
SSIS 将仅在使用项目部署模型部署包时使用项目参数。如果您使用的是包部署模型,您应该更改您的包以使用配置而不是项目参数。
我有一个名为 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
执行此操作时出现错误:
Failed to lock variable "$Project::Databases" 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
但是应该创建变量——毕竟它只是一个硬编码变量。
当我用谷歌搜索这个问题时,可能的解决方案是:
变量不是字符串类型(在我的例子中是)
或
执行 SQL 代理作业的用户没有正确的权限(在我的例子中,它是由系统管理员在数据库上 运行我将数据读取到 msdb 和 SSISDB)。
SSIS 将仅在使用项目部署模型部署包时使用项目参数。如果您使用的是包部署模型,您应该更改您的包以使用配置而不是项目参数。