创建SSIS包—循环和动态package

在上一个随笔中我们处理了一个010305c.dat文件,如果在一个文件夹中有多个dat文件应该怎么办呢? 这里就需要使用Foreach Loop container任务来循环处理文件,这个需要使用多个dat文件。

  

循环

首选对路径C:\SSISDemos下的所有.DAT文件进行循环操作并下载到数据库中。使用Foreach Loop循环执行操作。这里还在上随笔的Package里拖放一个Foreach Loop Container,重命名为Loop Through Files。

双击打开边界界面,点击打开Collection标签界面,可以看到Enumerator栏内默认选择Foreach File Enumerator,但是需要点击打开下拉列表框重新选择Foreach File Enumerator,然后在Folder栏傍边点击Browser选择目录C:\SSISDemos,Files栏内输入如图5-15

图5-15

现在需要设置Foreach File Eumeration中的变量。点击Variable Mappings标签界面在Variable下拉列表框中选择<New Variable…>,打开Add Variable对话框。为这个任务指定变量使用范围。为变量命名为ExtractFileName,其他设置保持默认,点击OK退出编辑界面。

  

 设置动态package

循环操作创建之后,需要在ConnectionManager中设置文件名和循环操作中产生的文件名一致。右击我们先前创建的Corporation Extract选择属性,在属性面板中点击Expressions对应的按钮。

打开Expressions Editor在Property下拉列表框中选择ConnectionString,如图5-16,可以直接在Expression中输入@[User::ExtractFileName]或者点击Expression栏中的按钮将这个变量拖放到表格中。如果输入变量要保证和Foreach Loop中设置的变量一致。

图5-16

设置完成之后属性如图5-17

图5-17

这样每次在C:\SSISDemos路径下查找到一个.DAT文件,ExtractFileName变量将被设置为带路径的文件名,这样这个Package会对每个.DAT文件进行处理。

现在我们遗漏的一个地方是将文件数据导入到数据库之后还没有把文件归档,首先在C:\SSISDemos目录下新建一个子文件夹C:\SSISDemos\Archive。在Connection Manager下右击新建一个文件链接,Usage Type选择Existing Folder,然后点击下方Browser指向C:\SSISDemos\Archive,点击OK并重命名为Archive File。

然后再Loop Through Files内拖放一个File System任务并重命名为Archive File,使用绿色箭头把它和Loop Corporate Data连接起来,重命名为Archive File。

双击Archive File打开编辑界面如图5-17,设置Operation选项为Move File,很明显这个意思就是将文件复制到目的文件夹内,这个属性还有很多的选择项,可以根据意思揣度出来是要进行什么操作。Destination设置为新建的Archive File连接,SourceConnection设置为Corporation Extract连接。最后整个Package首先抽取文件中的数据然后将文件转移到指定的路径内。

图5-17

现在可以运行整个Package,点击保存,运行,最后运行成功之后的Package如图5-18。

图5-18

  

【创建SSIS包】总结

这一节主要了解基本的SSIS转换,任务,容器。我们建立了一个完整的Package并将错误信息记录下来,然后把它放在一个循环中,找到每一个.DAT文件,将文件中的数据导入到数据库中,最后将文件放到另外一个目录中。下面的文章中将介绍更加复杂的ETL任务。

posted @ 2011-04-25 19:37  nd  阅读(4129)  评论(3编辑  收藏  举报