执行包任务

执行包任务通过允许包将其他包作为工作流的组成部分运行来扩展 Integration Services 的企业功能。

可以将执行包任务用于下列用途:

  • 细分复杂的包工作流。 此任务允许您将工作流细分为多个更易于读取、测试和维护的包。 例如,如果将数据加载到星型架构中,则可以生成一个单独的包来填充每个维度和事实数据表。

  • 重用部分包。 其他包可以重用部分包工作流。 例如,您可以生成可从不同的包中进行调用的数据提取模块。 调用提取模块的每个包都可以执行不同的数据清理、筛选或聚合操作。

  • 对工作单元进行分组。 可以将工作单元封装到单独的包中,并作为事务组件联接到父包的工作流中。 例如,父包运行辅助包,并根据辅助包的成功或失败来提交事务或回滚事务。

  • 控制包的安全性。 包作者需要访问的仅是多包解决方案的一部分。 通过将某个包细分为多个包,可以提供更高级别的安全性,因为可以只授予作者对相关包的访问权。

运行其他包的包通常称为父包,由父工作流运行的包称为子包。

Integration Services 包含执行工作流操作的任务,如执行可执行文件和批处理文件。 有关详细信息,请参阅执行进程任务

运行包

“执行包”任务可运行与父包一起包含在同一个项目中的子包。 您可以通过将 ReferenceType 属性设置为**“项目引用”**,然后设置 PackageNameFromProjectReference 属性,从项目中选择子包。

注意注意

ReferenceType 选项是只读的,并且如果包含包的项目尚未转换为项目部署模型,则该选项设置为“外部引用”。 有关转换的详细信息,请参阅将项目部署到 Integration Services 服务器

执行包任务还可以运行存储在 SQL Server msdb 数据库中的包和存储在文件系统中的包。 此任务使用 OLE DB 连接管理器连接到 SQL Server,或者使用文件连接管理器访问文件系统。 有关详细信息,请参阅 OLE DB 连接管理器平面文件连接管理器

执行包任务还可以运行数据库维护计划,该计划允许您管理同一 Integration Services 解决方案中的 SSIS 包和数据库维护计划。 数据库维护计划类似于 SSIS 包,但计划只能包含数据库维护任务,并始终存储在 msdb 数据库中。

如果选择存储在文件系统中的包,则必须提供包的名称和位置。 包可以驻留在文件系统中的任何位置;而不必与父包位于相同的文件夹中。

子包可以在父包的进程中运行,也可以在其自身的进程中运行。 子包在其自身的进程中运行需要更多内存,但可以提供更大的灵活性。 例如,如果子进程失败,父进程可以继续运行。

而有时您则希望父包和子包作为一个单元一起失败,或者您可能不希望引发其他进程的额外开销。 例如,如果子进程失败,而包的父进程中的后续处理取决于子进程的成功,则子包应当在父包的进程中运行。

默认情况下,“执行包”任务的 ExecuteOutOfProcess 属性被设置为 False,并且子包与父包运行在同一进程中。 如果将此属性设置为 True,则在单独的进程中运行子包。 这可能减慢子包的启动。 此外,如果将属性设置为 True,则不能在仅工具安装中调试包。 必须安装 Integration Services。 有关详细信息,请参阅安装 Integration Services

扩展事务

父包使用的事务可扩展到子包;因此,两个包都执行的工作可以提交或回滚。 例如,取决于子包执行的数据库插入,父包执行的数据库插入可以提交或回滚,反之亦然。 有关详细信息,请参阅继承的事务

传播日志记录详细信息

执行包任务运行的子包可能配置为使用日志记录,也可能没有配置为使用日志记录,但子包将始终将日志详细信息转发给父包。 如果执行包任务配置为使用日志记录,则任务将记录来自子包的日志详细信息。 有关详细信息,请参阅 Integration Services (SSIS) 日志记录

将值传递给子包

子包经常使用调用它的其他包(通常是其父包)传递给它的值。 使用来自父包的值在如下情况下非常有用:

  • 较大工作流的各部分分配给了不同的包。 例如,某个包每夜下载数据、汇总数据、将汇总数据值赋给变量,然后将这些值传递给其他包以进行其他数据处理。

  • 父包动态协调子包中的任务。 例如,父包确定当月的天数,将该数值赋给某一变量,然后子包即会将任务执行相应的次数。

  • 子包需要访问父包动态派生的数据。 例如,父包从表中提取数据并将行集加载到变量中,而子包执行对数据的其他操作。

您可以使用以下方法将值传递到子包:

  • 包配置

    Integration Services 提供了一种配置类型(父包变量配置),用于将值从父包传递到子包。 配置在子包中生成,并使用父包中的变量。 将配置映射到子包中的某个变量,或映射到子包中某个对象的属性。 该变量还可以用于脚本任务或脚本组件所使用的脚本中。

  • 参数

    您可以配置执行包任务以将父包变量或参数(或项目参数)映射到子包参数。 项目必须使用项目部署模型,并且子包必须包含在父包所在的同一项目中。 有关详细信息,请参阅执行包任务编辑器

    注意注意

    如果子包参数不敏感且映射到敏感的父参数,则子包将无法运行。

    支持以下映射条件:

    • 将敏感的子包参数映射到敏感的父参数

    • 将敏感的子包参数映射到不敏感的父参数

    • 将不敏感的子包参数映射到不敏感的父参数

父包变量可以在执行包任务作用域内或父容器(例如包)中定义。 如果有多个同名的变量可用,则使用在执行包任务作用域内定义的变量,或使用作用域内与该任务最近的变量。

有关详细信息,请参阅在子包中使用变量和参数的值

访问父包变量

子包可以通过使用脚本任务访问父包变量。 在**“脚本任务编辑器”“脚本”页上输入父包变量的名称时,不要在变量名称中包括“用户:”**。 否则,子包在您运行父包时找不到该变量。 有关使用脚本任务以访问父包变量的详细信息,请参阅 consultingblogs.emc.com 上的此博客文章 SSIS:访问父包中的变量

配置执行包任务

可以通过 SSIS 设计器或以编程方式来设置属性。

有关可以在 SSIS 设计器中设置的属性的详细信息,请单击下列主题之一:

有关在 SSIS 设计器中如何设置这些属性的详细信息,请单击以下主题:

以编程方式配置执行包任务

有关以编程方式设置这些属性的详细信息,请单击以下主题:

相关内容

Integration Services 图标(小) 使 Integration Services 保持最新

若要从 Microsoft 获得最新的下载内容、文章、示例和视频,以及从社区获得所选解决方案,请访问 MSDN 上的 Integration Services 页:


若要获得有关这些更新的自动通知,请订阅该页上提供的 RSS 源。