Foreach 循环容器

Foreach 循环容器定义包中的重复控制流。循环的实现与编程语言中的 Foreach 循环结构类似。在包中,通过使用 Foreach 枚举器启用循环。Foreach 循环容器将重复指定枚举器的每个成员的控制流。

SQL ServerIntegration Services 提供了下列枚举器类型:

  • Foreach ADO 枚举器,用于枚举表中的行。例如,可以获取 ADO 记录集中的行。

  • Foreach ADO.NET 架构行集枚举器,用于枚举有关数据源的架构信息。例如,可枚举并获取一组 AdventureWorksSQL Server 数据库中的表。

  • Foreach 文件枚举器,用于枚举文件夹中的文件。该枚举器可遍历子文件夹。例如,可读取 Windows 文件夹及其子文件夹中所有具有 *.log 文件扩展名的文件。

  • Foreach 源变量枚举器,用于枚举指定变量包含的可枚举对象。可枚举对象可以是数组、ADO.NET DataTable 和 Integration Services 枚举器等。例如,可以枚举包含服务器名称的数组中的值。

  • Foreach 项枚举器,用于枚举集合项。例如,可以枚举执行进程任务所使用的可执行文件和工作目录的名称。

  • Foreach Nodelist 枚举器,用于枚举 XML Path 语言 (XPath) 表达式的结果集。例如,此表达式可枚举并获取古代的所有作者:/authors/author[@period='classical']。

  • Foreach SMO 枚举器,用于枚举 SQL Server 管理对象 (SMO) 对象。例如,可枚举并获取 SQL Server 数据库中的视图列表。

以下关系图显示了一个具有文件系统任务的 Foreach 循环容器。该 Foreach 循环使用了 Foreach 文件枚举器,并将文件系统任务配置为复制文件。如果枚举器指定的文件夹包含四个文件,则循环将重复四次,复制四个文件。

枚举文件夹的 Foreach 循环容器

可以使用变量和属性表达式的组合,用枚举器集合值更新包对象的属性。首先,将集合值映射到用户定义变量;然后,对使用该变量的属性执行一个属性表达式。例如,将 Foreach 文件枚举器的集合值映射到名为 MyFile 的变量,然后在发送邮件任务的 Subject 属性的属性表达式中使用该变量。如果运行该包,则每次重复循环时,都会用一个文件名更新 Subject 属性。有关详细信息,请参阅 在包中使用属性表达式

映射到枚举器集合值的变量也可用于表达式和脚本。

Foreach 循环容器可以包含多个任务和容器,但只能使用一种类型的枚举器。如果 Foreach 循环容器包含多个任务,则可将枚举器集合值映射到每个任务的多个属性。

可以设置 Foreach 循环容器的事务属性,从而为包控制流的子集定义事务。通过这种方式,可以在 Foreach 循环级别而不是包级别管理事务。例如,如果 Foreach 循环容器重复了星形架构中的维度表和事实数据表的更新控制流,则可以配置事务以确保成功更新所有事实数据表,或者不更新任何事实数据表。有关详细信息,请参阅在包中合并事务

枚举器类型

枚举器可以配置,您必须为不同的枚举器提供不同的信息。

下表汇总了每种枚举器类型需要的信息。

枚举器

配置要求

Foreach ADO

指定 ADO 对象源变量和枚举器模式。

Foreach ADO.NET 架构行集

指定与数据库的连接和要枚举的架构。

Foreach 文件

指定要枚举的文件夹和文件、检索到的文件的文件名格式,以及是否要遍历子文件夹。

Foreach 源变量

指定包含要枚举的对象的变量。

Foreach 项

定义 Foreach 项集合中的项,包括列和列数据类型。

Foreach Nodelist

指定 XML 文档的源并配置 XPath 操作。

Foreach SMO

指定与数据库的连接以及要枚举的 SMO 对象。

在 Foreach 循环容器中使用属性表达式

可以将包配置为并发运行多个可执行文件。如果包中包含实现属性表达式的 Foreach 循环容器,则应当小心使用此配置。

通常需要实现属性表达式以便设置 Foreach 循环枚举器所使用的连接管理器的 ConnectionString 属性的值。ConnectionString 的属性表达式是由映射到枚举器的集合值的变量来设置的,并在每个循环迭代中被更新。

若要避免在循环中并行执行任务时遇到不可确定的定时导致的负数结果,应当将包配置为每次只运行一个可执行文件。例如,如果包可以并发运行多个任务,那么当一个 Foreach 循环容器枚举文件夹中的文件,然后检索文件名,然后使用执行 SQL 任务将文件名插入表中时,如果在两个执行 SQL 任务实例都试图同时写入,就有可能导致写入冲突。有关详细信息,请参阅在包中使用属性表达式

配置 Foreach 循环容器

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

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

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

以编程方式配置 Foreach 循环容器

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

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

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

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