使用 SSIS Foreach Loop 容器 – Foreach Item Enumerator

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 中分别输入服务器名和数据库名, 如下图所示:

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

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

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

时间: 2024-10-19 12:16:22

使用 SSIS Foreach Loop 容器 – Foreach Item Enumerator的相关文章

SSIS之Foreach循环容器用法

原文:SSIS之Foreach循环容器用法 要实现的业务:A数据库服务器上某库的T_GOODS_DECL的状态字段“Is_Delete”标记为“1”的时候删除B数据库服务器上对应库的T_GOODS_DECL表中的记录,二者的主键为“DECL_NO”. 总体设计图,实现原理:上一步骤将结果集传递到循环容器中,容器逐行取数据来执行容器里面的SQL任务. 第一步:建立“获取标记为已删除的DECL_NO”执行SQL任务 选择正确的数据连接器. 填写查询SQL语句. 结果集选项一定要选择“完整结果集”.

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

原文:http://blog.csdn.net/kk185800961/article/details/12276449 SQLServer 2008 R2 SSIS_Foreach 循环容器_Foreach 文件枚举器(导入路径下的所有txt文件的内容) 1. 拖动一个 [Foreach 循环容器]到[控制流]中,再拖动一个[数据流任务]到[Foreach 循环容器]中.如图: 2.编辑[Foreach 循环容器],在选项[集合]中选择[Foreach 文件枚举器],配置要遍历的文件夹及文件类

foreach 和 list.foreach 初步测试

1 单纯从速度上讲 小数据量下foreach 较快, list.Foreach 由于 public void ForEach(Action<T> action) { if(action ==null) { ThrowHelper.ThrowArgumentNullException(ExceptionArgument.match); } for(int i =0; i <this._size; i++){ action(this._items[i]);}} 有额外开销导致速度读上不给力,

SSIS – For Loop Container

今天给大家介绍 SSIS 2008 中的第一个容器:For Loop Container, 这个容器在实际的应用中用的不是很多,但是在某些特殊的场合还是很有用的.它用来实现对一个变量的循环,在循环之中对变量赋值,当满足这个循环的终止条件 的时候,它就退出这个循环.它的功能类似于结构化程序设计语言的 Do While 结构, 比如下面的结构实现了 1 到10 相加的效果. A = 1B = 0Do While A = 10B = B + AA = A + 1End 目的: 我有一个表 Client

ssis freach loop container 传入变量给 某些数据源的时候。

应该选择loop container ,设置delayvalidateion为true. 这样数据源控件就不会报empty的错误.

php之foreach遍历数组

foreach (PHP 4, PHP 5) The foreach construct provides an easy way to iterate over arrays. foreach works only on arrays and objects, and will issue an error when you try to use it on a variable with a different data type or an uninitialized variable.

Execute Sql Task 的Result DataSet如何返回

Execute Sql Task的Result DataSet 主要有以下四种,当Execute Sql Task返回结果之后,需要使用SSIS Variable 来接收数据. 例子中使用的数据表代码如下 create table dbo.test ( code int, name varchar(10), txt Nvarchar(10) ) insert into dbo.test(code,name,txt) values(1,'a',N'b'),(2,'c',N'd'),(3,'e',N

linq里的select和selectmany操作

Select() 和 SelectMany() 的工作都是依据源值生成一个或多个结果值.Select() 为每个源值生成一个结果值.因此,总体结果是一个与源集合具有相同元素数目的集合.与之相反,SelectMany() 将生成单一总体结果,其中包含来自每个源值的串联子集合.作为参数传递到 SelectMany() 的转换函数必须为每个源值返回一个可枚举值序列.然后,SelectMany() 将串联这些可枚举序列以创建一个大的序列. 下面两个插图演示了这两个方法的操作之间的概念性区别.在每种情况下

LINQ Sample

Sample LINQ Queries: In this section, you will learn some complex LINQ queries. We will use the following Student and Standard collection for our queries. Sample Collections: IList<Student> studentList = new List<Student>() { new Student() { S