实际改变的 SSIS 变量

Posted

技术标签:

【中文标题】实际改变的 SSIS 变量【英文标题】:SSIS Variable that pragmatically changed 【发布时间】:2016-07-10 20:54:10 【问题描述】:

这是对this question 的补充,之前有人问过但没有回答。

我遇到的问题是需要偶尔更新一组包含一个父级的 35 个子级 SSIS 包。它们都是相同的,只是它们处理的数据不同。当我进行更改时,我删除所有子项并将它们再次粘贴到同一个文件夹中,更新一个变量的值,该变量告诉包它是哪个子包,以便它知道要处理哪些数据(值 1-35) .

我的目标是找到一个解决方案,让包以某种方式知道它们是谁(通过文件名、变量、配置等),以便在更新后减少维护和生产设置。

包的文件名保留粘贴后附加的编号值(包名1,包名2,....包名X)在同一文件夹中。我在 SSIS 2012 中使用包部署,因此我无法像使用项目部署那样访问文件名作为参数。所有包都在 SSDT 解决方案中,父包调用所有 35 个子包。通过 Package Deployment,我使用 SQL 表中的配置来更改文件路径,因为它从服务器升级到服务器。

我很想自动化与孩子相关的其他事情,但除非我先解决这部分问题,否则我不能。另外,我需要再添加 15 个左右的孩子,这样可以节省很多时间。

感谢任何帮助

【问题讨论】:

【参考方案1】:

您是否尝试过使用环境变量? 并以不同的参数启动包。 Packages_with_Parameter_from_Environments

(对不起,我不能发表评论。)

【讨论】:

参数用于项目部署,我使用的是包部署。如果我有项目部署,我可以使用文件名参数来解决问题。不幸的是,项目部署不是我的选择。谢谢!【参考方案2】:

更新一组包含一个父级的 35 个子级 SSIS 包。它们都是相同的,只是它们处理的数据不同。

看起来您不应该像孩子一样使用同一个包的 35 个不同副本,而应该只使用参数来解决问题。

如果处理它们的方式是在文件名中,您可以使用带有掩码的文件名参数来使用 for each 循环提取变量,将这些参数输入到被调用的包中。如果没有,您可以将处理选项存储在 sql 表中,加载带有文件名和参数的选项,并使其包含您的所有信息,并让父包提取该信息并使用它来调用子包。

【讨论】:

我认为有轻微的误解。我正在使用脚本任务处理 sql 表中的数据。为了让这个过程更快,我在子包之间划分了要处理的事情列表。这些子包是我引用的文件名。当我更新包时,我已经告诉包它是什么号码,所以它知道它需要处理列表的哪个部分。我试图消除包裹的编号。 Yes.. 为此,我说不是将文件名放入包中,而是让父包通过控制表将它们分成 35 个子项中的每一个。不要在包裹内告诉他们。在子包中对其进行参数化,让父包传递该信息。

以上是关于实际改变的 SSIS 变量的主要内容,如果未能解决你的问题,请参考以下文章

在调试期间在SSIS中监视变量

如何更新数据流 ssis 中的变量值?

SSIS变量属性中EvaluateAsExpression设置的作用

SSIS – For Loop Container

SSIS 数据类型 第二篇:变量的数据类型

SSIS 数据类型 第二篇:变量的数据类型