APPLIES TO: SQL Server, including on Linux
Azure SQL Database
Azure SQL Data Warehouse
Parallel Data Warehouse
Foreach 循环容器将重复指定枚举器的每个成员的控制流。
Integration Services 提供了下列枚举器类型:
-
例如,可以获取 ADO 记录集中的行。
使用记录集目标。
-
SQL Server 数据库中的表。
-
例如,可读取 Windows 文件夹及其子文件夹中所有具有 *.log 文件扩展名的文件。
-
例如,可以枚举包含服务器名称的数组中的值。
-
例如,可以枚举执行进程任务所使用的可执行文件和工作目录的名称。
-
例如,此表达式可枚举并获取古代的所有作者:
/authors/author[@period='classical']。 -
SQL Server 数据库中的视图列表。
-
用于枚举位于指定 HDFS 位置的 HDFS 文件的 Foreach HDFS 文件枚举器。
-
用于在 Azure 存储中的 blob 容器中枚举 Blob 的 Foreach Azure Blob 枚举器。
-
Foreach ADLS 文件枚举器,用于枚举 Azure Data Lake Store 的目录中的文件。
-
Foreach Data Lake Storage Gen2 文件枚举器,用于枚举 Azure Data Lake Store Gen2 的目录中的文件。
如果枚举器指定的文件夹包含四个文件,则循环将重复四次,复制四个文件。
在包中使用属性表达式。
映射到枚举器集合值的变量也可用于表达式和脚本。
如果 Foreach 循环容器包含多个任务,则可将枚举器集合值映射到每个任务的多个属性。
Integration Services 事务。
枚举器类型
枚举器可以配置,您必须为不同的枚举器提供不同的信息。
下表汇总了每种枚举器类型需要的信息。
| 枚举器 | 配置要求 |
|---|---|
| Foreach ADO | 该变量必须是 Object 数据类型。 |
| Foreach ADO.NET 架构行集 | 指定与数据库的连接和要枚举的架构。 |
| Foreach 文件 | 指定要枚举的文件夹和文件、检索到的文件的文件名格式,以及是否要遍历子文件夹。 |
| Foreach 源变量 | 指定包含要枚举的对象的变量。 |
| Foreach 项 | 定义 Foreach 项集合中的项,包括列和列数据类型。 |
| Foreach Nodelist | 指定 XML 文档的源并配置 XPath 操作。 |
| Foreach SMO | 指定与数据库的连接以及要枚举的 SMO 对象。 |
| Foreach HDFS 文件枚举器 | 指定要枚举的文件夹和文件、检索到的文件的文件名格式,以及是否要遍历子文件夹。 |
| Foreach Azure Blob | 指定要枚举容器 blob 的 Azure blob 容器。 |
| Foreach ADLS 文件 | 指定包含要枚举的文件的 Azure Data Lake Store 目录。 |
| Foreach Data Lake Storage Gen2 文件 | 指定包含要枚举的文件以及其他选项的 Azure Data Lake Storage Gen2 目录。 |
使用 Foreach 循环容器将枚举添加到控制流
Foreach 循环容器。
Integration Services Tasks。
优先约束。
添加和配置 Foreach 循环容器
-
在控制流中添加或删除任务或容器。
-
在控制流中添加或删除任务或容器。
-
使用默认优先约束来连接任务和容器。
-
配置 Foreach 循环容器。
配置 Foreach 循环容器
此过程介绍如何配置 Foreach 循环容器,包括如何在枚举器级和容器级上配置属性表达式。
-
Integration Services 项目。
-
单击“控制流” 选项卡,然后双击 Foreach 循环。
-
在 “Foreach 循环编辑器” 对话框中,单击 “常规” ,并且,根据需要还可以修改 Foreach 循环的名称和说明。
-
单击 “集合” ,然后从 “枚举器” 列表中选择一个枚举器类型。
-
指定一个枚举器并对枚举器选项进行如下设置:
-
另外,还请指定是否包含子文件夹,以枚举更多文件。
-
在 “数据类型” 列表中为每个列选择一个数据类型,然后单击 “确定” 。
在列中键入值或从列表中选择值。
备注
若要添加新行,请在刚才输入的单元格之外,单击任一位置。
备注
如果值与列数据类型不兼容,文本将突出显示。
-
若要使用 Foreach ADO 枚举器,请选择一个现有的变量,或在 “ADO 对象源变量” 列表,单击 “新建变量” 来指定一个变量(包含要枚举的 ADO 对象的名称),然后选择一个枚举模式选项。
如果要创建新变量,请在 “添加变量” 对话框中设置该变量的属性。
-
若要使用 Foreach ADO.NET 架构行集枚举器,请选择一个现有的 ADO.NET 连接,或在 “连接” 列表中,单击 “新建连接” ,然后选择一个架构。
也可以单击 “设置限制” ,选择架构限制,选择包含限制值的变量,或键入限制值,然后单击 “确定” 。
-
若要使用 Foreach 源变量枚举器,请在 “变量” 列表中选择变量。
-
根据为 DocumentSourceType 选择的值,请从列表中选择变量或文件连接,或创建新变量或文件连接,或在“文档源编辑器” 中键入 XML 源代码。
根据为 OuterXPathStringSourceType 设置的值,请从列表中选择变量或文件连接,或创建新的变量或文件连接,或键入外部 XML 路径语言 (XPath) 表达式的字符串。
根据为 InnerXPathStringSourceType 设置的值,请选择变量或文件连接,创建新的变量或文件连接,或键入内部 XPath 表达式的字符串。
-
如果选择单击 “浏览”,则请在 “选择 SMO 枚举” 对话框中,选择要枚举的对象类型和枚举类型,然后单击 “确定” 。
-
-
添加或更改属性表达式。
备注
在“属性” 列表中列出的属性因枚举器而异。
-
(可选)单击“变量映射” ,将对象属性映射到集合值,然后执行以下操作:
-
在“变量” 列表中选择变量,或单击 <“新建变量”> 创建新的变量。
-
如果要添加新变量,那么请在 “添加变量” 对话框中设置该变量的属性,然后单击 “确定”。
-
如果使用 For Each Item 枚举器,可以在 “索引” 列表中来更新索引值。
备注
只有 For Each Item 枚举器可以使用 0 以外的索引值。
-
-
添加或更改属性表达式。
-
单击“确定” 。
“常规”页 - Foreach 循环编辑器
可以使用 “Foreach 循环编辑器” 对话框的 “常规” 页,对 Foreach 循环容器进行命名和说明,该容器使用指定的枚举器重复集合中每个成员的工作流。
配置 Foreach 循环容器。
选项
此名称在任务图标和日志中用作标签。
备注
对象名称在一个包内必须是唯一的。
键入对 Foreach 循环容器的说明。
“集合”页 - Foreach 循环编辑器
可以使用“Foreach 循环编辑器” 对话框的“集合” 页,指定枚举器类型以及配置枚举器。
配置 Foreach 循环容器。
静态选项
此属性具有下表所列的选项:
| ReplTest1 | 描述 |
|---|---|
| Foreach 文件枚举器 | 选择此值将显示 “Foreach 文件枚举器” 部分中的动态选项。 |
| Foreach 项枚举器 | 选择此值将显示 “Foreach Item 枚举器” 部分中的动态选项。 |
| Foreach ADO 枚举器 | 选择此值将显示 “Foreach ADO 枚举器” 部分中的动态选项。 |
| Foreach ADO.NET 架构行集枚举器 | 选择此值将显示 “Foreach ADO.NET 枚举器” 部分中的动态选项。 |
| Foreach 源变量枚举器 | 选择此值将显示 “Foreach 源变量枚举器” 部分中的动态选项。 |
| Foreach Nodelist 枚举器 | 选择此值将显示 “Foreach Nodelist 枚举器” 部分中的动态选项。 |
| Foreach SMO 枚举器 | 选择此值将显示 “Foreach SMO 枚举器” 部分中的动态选项。 |
| Foreach HDFS 文件枚举器 | 选择此值将显示“Foreach HDFS 文件枚举器” 部分中的动态选项。 |
| Foreach Azure Blob 枚举器 | 选择此值将显示 “Foreach Azure Blob 枚举器” 部分中的动态选项。 |
| Foreach ADLS 文件枚举器 | 选择此值会显示“Foreach ADLS 文件枚举器” 部分中的动态选项。 |
| Foreach Data Lake Storage Gen2 文件枚举器 | 选择此值会显示“Foreach Data Lake Storage Gen2 文件枚举器”部分中的动态选项 。 |
单击省略号按钮 (…) 可以添加枚举器属性的属性表达式,或编辑并计算现有属性表达式 。
表达式生成器
枚举器动态选项
Enumerator = Foreach 文件枚举器
可以将枚举器配置为包括子文件夹。
这些更改可能导致大量意外情况:
-
如果删除文件,则 Foreach 循环中某个任务的操作可能会影响一组与后续任务所用文件不同的文件。
-
如果重命名文件并且外部进程自动添加文件以替换重命名的文件,则 Foreach 循环中任务的操作可能会影响相同的文件两次。
-
如果添加文件,则可能很难确定 Foreach 循环影响的文件。
提供要枚举的根文件夹的路径。
浏览以定位到根文件夹。
指定要枚举的文件。
备注
例如,要包括名称包含“abc”的文件,请使用下面的筛选器:abc**。
但是,枚举器还会返回 Excel 2007 文件,因为这些文件具有扩展名“.xlsx”。
可以通过在“集合”页上展开“表达式”,选择 FileSpec 属性,然后单击省略号按钮 (…) 来添加属性表达式,从而使用表达式指定要在集合中包含的文件 。
如果在“文件”选项中指定通配符,则返回的完全限定路径与该筛选条件匹配。
如果在“文件”选项中指定了通配符,则返回的文件名与该筛选条件匹配。
如果在“文件”选项中指定通配符,则返回的文件名和文件扩展名与该筛选条件匹配。
选择此项可以在枚举中包括子文件夹。
Enumerator = Foreach Item 枚举器
如果表有 10 行,则循环重复 10 次。
然后,可以通过使用这些变量的属性表达式更新执行进程任务的 Executable 和 WorkingDirectory 属性。
为表中的每个列提供值。
备注
在行列中输入值后,新行将自动添加到表中。
备注
如果所提供的值与列数据类型不兼容,则文本以红色显示。
列出活动列的数据类型。
选择项,再单击 “删除” ,即可从列表中删除它。
单击此项可以配置项中的列的数据类型。
“For Each Item 列”对话框 UI 参考
Enumerator = Foreach ADO 枚举器
如果变量包含 ADO.NET 数据集,则可以将枚举器配置为枚举多个表中的行或枚举表。
从列表中选择用户定义的变量,或单击 “新建变量...”< > 创建新变量。
备注
变量必须有 Object 数据类型,否则会发生错误。
添加变量
选择此项将只枚举第一个表中的行。
只有当要枚举的对象是同一 ADO.NET 数据集的所有成员时,此选项才可用。
选择此项将只枚举表。
Enumerator = Foreach ADO.NET 架构行集枚举器
例如,如果 Foreach 循环包括执行 SQL 任务,则可以使用 Foreach ADO.NET 架构行集枚举器枚举架构(例如, AdventureWorks 数据库中的列),使用执行 SQL 任务获取架构权限。
从列表中选择 ADO.NET 连接管理器,或单击 “新建连接...”< > 创建新的 ADO.NET 连接管理器。
重要
SQL Server “连接管理器” 对话框的 .Net Providers for OleDb 部分中列出的 Native Client。
配置 ADO.NET 连接管理器
选择要枚举的架构。
设置要应用于指定架构的限制。
“架构限制”对话框
Enumerator = Foreach 源变量枚举器
例如,如果 Foreach 循环包括运行查询并在变量中存储结果的执行 SQL 任务,则可以使用 Foreach 源变量枚举器枚举查询结果。
从列表中选择变量,或单击“<新建变量...>”以创建新的变量 。
添加变量
Enumerator = Foreach NodeList 枚举器
例如,如果 Foreach 循环包括脚本任务,则可以使用 Foreach NodeList 枚举器将满足 XPath 表达式条件的值从 XML 文件传递到脚本任务。
如果 XPath 枚举类型设置为 ElementCollection,则 Foreach NodeList 枚举器可以将内部 XPath 表达式(存储于 InnerXPathString 属性中)应用到元素的集合。
Employing XML in the .NET Framework”。
此属性具有下表所列的选项:
| ReplTest1 | 描述 |
|---|---|
| 直接输入 | 将源设置为 XML 文档。 |
| 文件连接 | 选择包含 XML 文档的文件。 |
| 变量 | 将源设置为包含 XML 文档的变量。 |
如果将 DocumentSourceType 设置为“直接输入”,请提供 XML 代码,或单击省略号按钮 (…) 以通过使用“文档源编辑器”对话框来提供 XML 。
如果将 DocumentSourceType 设置为“文件连接” ,请选择文件连接管理器,或单击 “新建连接...”< > 创建新的连接管理器。
文件连接管理器编辑器
如果将 DocumentSourceType 设置为“变量” ,请选择现有变量,或单击 “新建变量...”< > 创建新变量。
添加变量。
此属性具有下表所列的选项:
| ReplTest1 | 描述 |
|---|---|
| Navigator | 使用 XPathNavigator 进行枚举。 |
| Node | 枚举 XPath 运算返回的节点。 |
| NodeText | 枚举 XPath 运算返回的文本节点。 |
| ElementCollection | 枚举 XPath 运算返回的元素节点。 |
此属性具有下表所列的选项:
| ReplTest1 | 描述 |
|---|---|
| 直接输入 | 将源设置为 XML 文档。 |
| 文件连接 | 选择包含 XML 文档的文件。 |
| 变量 | 将源设置为包含 XML 文档的变量。 |
如果将 OuterXPathStringSourceType 设置为“直接输出” ,请提供 XPath 字符串。
如果将 OuterXPathStringSourceType 设置为“文件连接” ,请选择文件连接管理器,或单击 “新建连接...”< > 创建新的连接管理器。
文件连接管理器编辑器
如果将 OuterXPathStringSourceType 设置为“变量” ,请选择现有变量,或单击 “新建变量...”< > 创建新变量。
添加变量。
如果将 EnumerationType 设置为 ElementCollection,请从列表中选择内部元素的类型。
此属性具有下表所列的选项:
| ReplTest1 | 描述 |
|---|---|
| 直接输入 | 将源设置为 XML 文档。 |
| 文件连接 | 选择包含 XML 文档的文件。 |
| 变量 | 将源设置为包含 XML 文档的变量。 |
如果将 InnerXPathStringSourceType 设置为“直接输入” ,请提供 XPath 字符串。
如果将 InnerXPathStringSourceType 设置为“文件连接” ,请选择文件连接管理器,或单击 “新建连接...”< > 创建新的连接管理器。
文件连接管理器编辑器
如果将 InnerXPathStringSourceType 设置为“变量” ,请选择现有变量,或单击 “新建变量...”< > 创建新变量。
添加变量。
Enumerator = Foreach SMO 枚举器
例如,如果 Foreach 循环包括执行 SQL 任务,则可以使用 Foreach SMO 枚举器枚举 AdventureWorks 数据库中的表并运行计算每个表中行数的查询。
选择现有 ADO.NET 连接管理器,或单击 “新建连接...”< > 创建新的连接管理器。
配置 ADO.NET 连接管理器
指定要枚举的 SMO 对象。
选择 SMO 枚举。
“选择 SMO 枚举”对话框
枚举器 = Foreach HDFS 文件枚举器
每个 HDFS 文件名都可以存储在变量中并用于 Foreach 循环容器内的任务。
Hadoop Connection Manager。
指定包含要枚举的 HDFS 文件的 HDFS 目录名称。
例如,MySheet*.xls* 包括 MySheet001.xls 和 MySheetABC.xlsx 等文件。
指定由 SSIS 检索的文件名类型。
-
“完全限定名称” 表示包含目录路径和文件名的完整名称。
-
“仅名称” 表示仅检索文件名而不检索路径。
指定是否要以递归方式遍历子文件夹。
在编辑器中的“变量映射” 页上,选择或创建一个变量来存储枚举的 HDFS 文件的名称。
枚举器 = Foreach Azure Blob 枚举器
枚举的 blob 文件名可以存储在变量中并用于 Foreach 循环容器内的任务。
此处下载功能包。
选择一个现有的 Azure 存储连接管理器或创建一个新的、引用 Azure 存储帐户的连接管理器。
Azure 存储连接管理器。
指定包含要枚举的 blob 文件的 blob 容器名称。
Blob 目录是虚拟的层次结构。
指定是否在子目录中以递归方式搜索。
例如,MySheet*.xls\* 包括 MySheet001.xls 和 MySheetABC.xlsx 等文件。
将枚举在 TimeRangeFrom 之后以及 TimeRangeTo 之前修改的文件。
枚举器 = Foreach ADLS 文件枚举器
可将枚举的文件的完整路径(以斜杠 / 为前缀)存储在变量中,然后在 Foreach 循环容器内的任务中使用此文件路径。
指定 Azure Data Lake 连接管理器,或创建一个引用 ADLS 帐户的新连接管理器。
指定包含要枚举的文件的 ADLS 目录。
支持 * 和 ? 通配符。
指定是否在指定目录中以递归方式搜索。
枚举器 = Foreach Data Lake Storage Gen2 文件枚举器
借助 Foreach Data Lake Storage Gen2 文件枚举器,SSIS 包可枚举 Azure Data Lake Storage Gen2 中的文件 。
指定现有的 Azure 存储连接管理器,或者新建一个引用 Data Lake Storage Gen2 服务的 Azure 存储连接管理器。
指定要枚举其所含文件的文件夹的路径。
指定是否在指定文件夹中以递归方式搜索。
“变量映射”页 - Foreach 循环编辑器
循环每次迭代时,都会用集合值更新变量的值。
配置 Foreach 循环容器。
Integration Services 教程“创建简单 ETL 包教程”包括一节介绍如何添加和配置 Foreach 循环的课程。
选项
选择现有变量,或单击 “新建变量...” 创建新变量。
备注
映射一个变量之后,“变量” 列表中会自动增加一行。
添加变量
对于其他枚举器类型,索引是只读的。
备注
索引以 0 为基数。
选择一个变量,再单击“删除” 。
“架构限制”对话框 (ADO.NET)
可以使用 “架构限制” 对话框设置要应用于 Foreach ADO.NET 架构行集枚举器的架构限制。
选项
选择要应用于该架构的约束。
从列表中选择变量,或单击“新建变量...”以创建新的变量。
添加变量
提供文本来定义限制。
“For Each Item 列”对话框
可以使用 “For Each Item 列” 对话框定义 Foreach Item 枚举器枚举的项中的列。
选项
列出各列。
选择数据类型。
添加新列。
选择某列,再单击“删除” 。
“选择 SMO 枚举”对话框
SQL Server 管理对象 (SMO) 并选择枚举类型。
选项
展开服务器,再选择 SMO 对象。
使用“对象”枚举类型。
为“对象”枚举类型使用“预填充” 选项。
使用“名称”枚举类型。
使用 URN 枚举类型。
此选项仅适用于文件。
配合使用属性表达式和 Foreach 循环容器
如果包中包含实现属性表达式的 Foreach 循环容器,则应当小心使用此配置。
ConnectionString 的属性表达式是由映射到枚举器的集合值的变量来设置的,并在每个循环迭代中被更新。
在包中使用属性表达式。
另请参阅
Integration Services 容器
转自:https://docs.microsoft.com/zh-cn/sql/integration-services/control-flow/foreach-loop-container?view=sql-server-2017



