ssis常用包------foreach 循环容器

1.       foreach 循环容器

接上面的例子:如果我们想把一组文件进行复制到指定目录并进行解压操作,该如何进行?那就需要用到foreach循环容器

 

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

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

  • Foreach ADO 枚举器,用于枚举表中的行。例如,可以获取 ADO 记录集中的行。
  • Foreach ADO.NET 架构行集枚举器,用于枚举有关数据源的架构信息。例如,可枚举并获取一组 AdventureWorks2008R2SQL 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 数据库中的视图列表。

1.1 枚举器类型

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

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

枚举器

配置要求

Foreach ADO

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

Foreach ADO.NET 架构行集

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

Foreach 文件

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

Foreach 源变量

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

Foreach

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

Foreach Nodelist

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

Foreach SMO

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

1.2 配置枚举器

 常规、集合、变量映射和表达式 ,具体情况请参阅technet相关信息。

 http://technet.microsoft.com/zh-cn/library/ms187670(SQL.90).aspx 这里有非常详细的说明。 

1.3 实例

首先拉入一个foreach循环容器,并配置如下

ssis常用包------foreach 循环容器

ssis常用包------foreach 循环容器

 

注意这里选取文件枚举器,虽然默认就是文件枚举器,但是需要先选择其他的Enumerator,然后切换回文件枚举器才能看到下面的设置,难道是我们sql2008bug?

ssis常用包------foreach 循环容器

 

在变量映射的时候需要建立一个变量来存储文件的路径,如上图,类型为字符串

在连接管理器中,建立两个连接,分别指向到源地址和目标地址。这里需要注意的是。目标地址不需要指定具体的文件名,因为是多个,可以和上例一样先选中一个,然后再属性中再删除。源地址的connectstring要在连接后清除,因为我们需要使用我们新建立的变量filepath,在expressions中指定变

 

看文件系统任务:

 

ssis常用包------foreach 循环容器

 

看执行进程任务

ssis常用包------foreach 循环容器

 

 

 

这里和上例都基本一致。

 

1.4 引申说明

这个例子把c:\ssis1\source下的所有文件copyc:\ssis1\des下并解压压缩文件

source下都是rar文件的时候运行正常。

如果source下除了rar文件还有其他文件,会怎样呢?那肯定会报错,因为在执行进程任务的时候,对非rar文件是无法进行解压操作的。那这个问题如何解决呢?

我们可以分成两部分处理,对rar执行上述操作,对非rar只执行copy操作。只要修改foreach的获取文件的类型把*.*修改为*.rar

 

工程下载:http://files.cnblogs.com/tippoint/%e9%a1%b9%e7%9b%ae1.rar

 

你可能感兴趣的:(foreach)