创建SSIS包—循环和动态package

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

在上一个随笔中我们处理了一个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

img_0a7e2ba4a639484cb5bc571b954bf6fe.png

图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中设置的变量一致。

img_e0958712ba695e1b22a332e927451ef0.png

图5-16

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

img_c8a6bb8dcc75b53e574fcb884de3b116.png

图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首先抽取文件中的数据然后将文件转移到指定的路径内。

img_2887cd513fc938828e90630a00ae881e.png

图5-17

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

img_5594e411a2801480d7764fbf796afdbf.png

图5-18

  

【创建SSIS包】总结

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

作者:Tyler Ning
出处:http://www.cnblogs.com/tylerdonet/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过以下邮箱地址williamningdong@gmail.com  联系我,非常感谢。

目录
相关文章
|
SQL 存储 数据库
SSIS高级转换任务—在Package中是用临时表是需要设置RetainSameConnection属性
在上一个导入列这个例子中我们创建一个实际的表来存储文件路径,在生产环境中我们可能不会创建一个实际的物理表来存储这些信息,而是创建临时表。这里有一个小小的技巧,在Control Flow中拖放两个Execute SQL task,一个创建临时表,另一个销毁临时表,执行这个package,会遇到一个错误,在Progress中提示信息显示不存在这个临时表。
1017 0
定义命令包
定义命令包 如果Makefile中出现一些相同命令序列,那么我们可以为这些相同的命令序列定义一个变量。定义这种命令序列的语法以“define”开始,以“endef”结束,如: define run-yacc yacc $(firstword $^) mv y.tab.c $@ endef 这里,“run-yacc”是这个命令包的名字,其不要和Makefile中的变量重名。
776 0
|
开发工具 Android开发
使用外部包(package)
使用外部包(package)
164 0
|
3月前
|
持续交付 Python
如何在Python中自动解决模块和包的依赖冲突?
完全自动解决所有依赖冲突可能并不总是可行,特别是在复杂的项目中。有时候仍然需要人工干预和判断。自动解决的方法主要是提供辅助和便捷,但不能完全替代人工的分析和决策😉。
|
6月前
|
缓存 前端开发 JavaScript
Webpack 模块解析:打包原理、构造形式、扣代码补参数和全局导出
Webpack 模块解析:打包原理、构造形式、扣代码补参数和全局导出
319 1
|
机器学习/深度学习 算法 C++
python无法导入自定义的包:未解析的引用“Node“
python无法导入自定义的包:未解析的引用“Node“
python无法导入自定义的包:未解析的引用“Node“
|
监控 Oracle 关系型数据库
|
JSON 数据格式 Python
24.从入门到精通:__name__属性 dir() 函数 标准模块 包 从一个包中导入*
24.从入门到精通:__name__属性 dir() 函数 标准模块 包 从一个包中导入*
|
缓存
vs2015未能正确加载“ProviderPackage”包。
原文:vs2015未能正确加载“ProviderPackage”包。 出现以下错误的解决方案 --------------------------- Microsoft Visual Studio --------------------------- 未能正确加载“ProviderPackage”包。
3809 0

热门文章

最新文章