复制SSIS包参数与连接管理器到新包时提示参数不存在问题咨询
问题原因
你的代码逻辑存在4个核心错误,导致参数匹配失败:
- 参数名匹配错误:你直接将环境变量名称作为SSIS包的参数名传入,但环境变量名和包实际的参数/连接管理器属性名并不强制一致,你没有从SSIS目录的参数配置表中查询旧包实际绑定的参数名。
- 目标对象配置错误:你查询的是旧包
myPackage.dtsx的关联信息,生成的脚本中@object_name仍然是旧包名,没有替换为你新部署的包名,执行时自然找不到新包下的对应参数。 - 未考虑参数类型差异:普通包级参数的
@object_type=30是正确的,但连接管理器参数的配置需要对应正确的属性路径,你没有从系统表中读取正确的参数全路径名称,直接用环境变量名匹配自然会出现找不到MSDBConnection.ConnectionString的问题。 - 缺少环境引用校验:你需要先确认新包所在的项目已经添加了
PreProd环境的引用,否则即使参数名正确也无法完成环境变量绑定。
修正方案
你需要关联catalog.object_parameters系统表查询旧包的实际参数配置,再生成对应新包的配置脚本,示例代码如下:
SELECT op.parameter_name, op.object_type, Script = 'EXEC [SSISDB].[catalog].[set_object_parameter_value] @object_type= ' + CAST(op.object_type AS NVARCHAR(10)) + ' , @parameter_name= N''' + REPLACE(op.parameter_name, '''', '''''') + ''' , @object_name= N''你的新包名.dtsx'' -- 替换为新包的实际名称 , @folder_name= N''' + f.name + ''' , @project_name= N''' + pr.name + ''' , @value_type= R , @parameter_value= N''' + REPLACE(ev.name, '''', '''''') + '''; ' FROM [SSISDB].[catalog].[object_parameters] op JOIN [SSISDB].[catalog].[projects] pr ON op.project_id = pr.project_id JOIN [SSISDB].[catalog].[folders] f ON pr.folder_id = f.folder_id JOIN [SSISDB].[catalog].[environment_references] er ON pr.project_id = er.project_id JOIN [SSISDB].[catalog].[environments] e ON er.environment_name = e.name AND er.environment_folder_name = f.name JOIN [SSISDB].[catalog].[environment_variables] ev ON op.referenced_variable_name = ev.name AND ev.environment_id = e.environment_id WHERE e.name = N'PreProd' AND pr.name = 'myProject' AND op.object_name = 'myPackage.dtsx' -- 旧包名称 AND op.value_type = 'R' -- 只筛选已经绑定环境变量的参数
执行上述查询生成的脚本,替换新包名称后直接执行即可完成批量配置。
内容的提问来源于stack exchange,提问作者AndreA
相关产品推荐
相关产品推荐

