使用 SSIS Foreach Loop 容器 – Foreach Item Enumerator

转载 2011年01月21日 10:45:00

Foreach Loop 容器是SSIS 结构化控制流设计中一个非常常用的控制流任务,它用来遍历一个集合中的所有对象,然后执行相同的操作,它的功能类似于结构化程序设计中的
Foreach i in 集合

END 结构,在SSIS中这些可以定义的集合包括:

项目集合 (Foreach Item Enumberator)
文件集合(Foreach File Enumberator)
记录集合 (Foreach ADO Enumberator)
表结构集合 (Foreach ADO.NET Schema Enumberator)
变量值集合 (Foreach From Variable Enumberator)
XML 节点集合 (Foreach Nodelist Enumberator)
SQL Server Management Object 集合 (Foreach SMO Enumberator)

Foreach Item Enumberator 一个最常见的使用是遍历服务器中的数据库,然后对数据库中的表执行相同的操作。比如说我有10 个不同的数据库,分布在不同的数据库服务器上,现在我们需要对10个数据库中的一个表进行一个相似的操作:清除一个叫做 Log 的表的内容。当然有很多方法实现这个目的,但是在我的这个例子中我使用 Foreach Loop 容器来实现它。

  • 首先建立一个新的SSIS Package
  • 建立两个系统变量:DatabaseName 和 ServerName,这两个变量将用来存储 Foreach Loop 中的Item 集合中表示的服务器名和数据库名
  • 建立一个OLEDB 的数据连接,使用Windows Authentication,并且要确保SSIS Package 的执行用户在每个数据库上都有执行相适应的DML 的权限;使用表达式的方式动态生成连接字符串。(参考我的另一篇文章: http://www.bridata.ca/blog/?p=216  如何使用数据库动态连接)
  • 将一个Foreach Loop Container 放在Control Flow 页面中,双击打开编辑器;
  • 在 Collection 面板中的Enumerator 下选择 Foreach Item Enumberator;
  • 这时候的窗口的下方就会出现 Enumertor Configuration 区域,单击 Columns 按钮,添加两个Items 中的字段,它们的数据类型全部是 String 类型,这两个字段分别用来存储 服务器名称和数据库名称;注意:字段的名称不能修改,系统默认是 Column 0, column 1….
  • 在 Column 0 和 Column 1 中分别输入服务器名和数据库名, 如下图所示:

SSISForeachLoop-1

  • 单击屏幕上的 Collection, 选择变量映射, 如下图所示, 用户变量ServerName 和 DatabaseName 的索引分别是 0 和1, 也就是说和上图中的 Column0 和 Column1 是映射关系,他们用来存储 Foreach Loop 中的Item 集合中的值。比如说这本例中 Item 集合中有10 行数据,也就是在运行中有10 次循环,每一次循环,我们的用户变量 ServerName 和 DatabaseName 的值都会根据 Item 集合中的值被改变。

SSISForeachLoop-2

  • 将一个 Execute SQL Task 加入到Foreach Loop 容器中,设置其 ConnectionType 为 OLE DB, Connection 为刚建立的 OLEDB Connection,在 SQL statement 中输入:Truncate Table Log。部分SSIS Package 如下图所示:

SSISForeachLoop-3

因为这个OLEDB连接 是基于变量建立的,而变量在Foreach Item 的循环中动态改变,所以这个连接也就动态改变。

SSIS【Foreach 循环容器_Foreach 文件枚举器】(导入路径下的所有txt文件的内容)

SSIS_Foreach 循环容器_Foreach 文件枚举器(导入路径下的所有txt文件的内容) 1. 拖动一个 【Foreach 循环容器】到【控制流】中,再拖动一个【数据流任务】到【For...
  • kk185800961
  • kk185800961
  • 2013年10月04日 13:07
  • 6239

SSIS【Foreach 循环容器_Foreach Item 枚举器】(循环读取数据库)

SQL Server 2008 R2 SSIS_Foreach 循环容器_Foreach Item 枚举器(循环读取数据库) 1. 首先在两个数据库中创建两个相同的表。下面将演示 将这两个表的数...
  • kk185800961
  • kk185800961
  • 2013年10月04日 15:46
  • 4267

SSIS【Foreach 循环容器_Foreach ADO 枚举器】(逐行读取某个表)

SQL Server 2008 R2 SSIS_Foreach 循环容器_Foreach ADO 枚举器(逐行读取某个表) 1.创建如下表: -- drop table mytab crea...
  • kk185800961
  • kk185800961
  • 2013年10月04日 17:20
  • 5608

SSIS【Foreach 循环容器_Foreach Item 枚举器】(循环读取数据库)

SQL Server 2008 R2 SSIS_Foreach 循环容器_Foreach Item 枚举器(循环读取数据库) 1. 首先在两个数据库中创建两个相同的表。下面将演示 将这两个表的数...
  • kk185800961
  • kk185800961
  • 2013年10月04日 15:46
  • 4267

SSIS:用foreach loop将一个目录下的内容导入到数据库中

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://boyi55.blog.51cto.com/434...
  • longph
  • longph
  • 2011年04月21日 15:08
  • 648

SSIS中Foreach循环容器处理XML数据

上一篇文章 《在SSIS 中使用 Web Service 以及 解析XML 数据》中介绍了使用SSIS的WebService控件解析XML数据,最后也提到对于返回的XML数含有数组类型的时候需要一点额...
  • aiyoyocxuan
  • aiyoyocxuan
  • 2016年05月16日 20:50
  • 598

SSIS【Foreach 循环容器_Foreach 文件枚举器】(导入路径下的所有txt文件的内容)

SSIS_Foreach 循环容器_Foreach 文件枚举器(导入路径下的所有txt文件的内容) 1. 拖动一个 【Foreach 循环容器】到【控制流】中,再拖动一个【数据流任务】到【For...
  • kk185800961
  • kk185800961
  • 2013年10月04日 13:07
  • 6239

SSIS【Foreach 循环容器_Foreach ADO 枚举器】(逐行读取某个表)

SQL Server 2008 R2 SSIS_Foreach 循环容器_Foreach ADO 枚举器(逐行读取某个表) 1.创建如下表: -- drop table mytab crea...
  • kk185800961
  • kk185800961
  • 2013年10月04日 17:20
  • 5608

SSIS【Foreach 循环容器_Foreach ADO.NET 架构行集枚举器】(循环导入一个Excel所有工作簿)

SQL Server 2008R2 SSIS_Foreach 循环容器_Foreach ADO.NET 架构行集枚举器(循环导入Excel工作表) 1.本节主要是循环把Sheet1、Sheet2...
  • kk185800961
  • kk185800961
  • 2013年10月04日 19:01
  • 2752

SSIS【Foreach 循环容器_Foreach 文件枚举器】(导入路径下的所有txt文件的内容) (转)

原文:http://blog.csdn.net/kk185800961/article/details/12276449 SQLServer 2008 R2 SSIS_Foreach 循环容器...
  • xiuping05214
  • xiuping05214
  • 2015年04月24日 10:57
  • 687
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用 SSIS Foreach Loop 容器 – Foreach Item Enumerator
举报原因:
原因补充:

(最多只允许输入30个字)