容器是Integration Services 包中非常重要的一部分功能,它可以对控制流中的任务进行直观的划分与组织,使包的结构简明扼要、易于管理、易于维护。
在Integration Services 中,主要有以下三种类型的容器: 序列容器(SequenceContainers)、For 循环、Foreach 循环。下面我们将一一介绍这三种容器的使用方法。
(一)、序列容器(SequenceContainers)。
序列容器是一种十分简单,但使用非常广泛的容器,它可以对控制流的任务流组件进行结构化处理,把一些业务相关的任务组件,放到一个序列容器中,使整个包看起来更加整洁、美观,就如同我们家里的书柜、衣柜似的,把不同种类的东西整理在里面,收藏起来,既美观,又易于取用。
比如,在一个Integration Sevices包中,包含有财务数据、业务数据。整个包中的任务组件会非常多,如果不对它们进行分组管理,整个包看起来就会比较乱,非常难于管理与维护。相反如果我们将处理财务数据的任务,放入一个序列容器中,将处理业务数据的任务放入另一个序列容器,整个包看起来,就会一目了然,哪些任务是处理财务数据,哪些任务是处理业务数据了,非常清楚。如图:

  不仅如此,如果点击右上角象箭头一样的符号,还可才把这些容器折叠起来,整个包就更加清楚明了,一目了然了。如图:

   

 (二)For 循环。

  For 循环组件,类似于编程语言中的For 循环,当人们需要反复执行同一个工作任务或者一系列工作任务的时候,就需要用到For 循环,它既可以用于有限次循环,也可以用于“无限次循环”,比如我们监控包的运行状况,当错误数据>=5时,包停止运行,并通知管理员;又如监控某个文件夹是否有新文件产生、监控网络链接是否正常、监控服务器的各项指标(Cpu、内存)是否正常等,论询特定事件是否发生,这就可以设置为无限次循环。

  For 循环的使用非常简单,它主要有三个表达式,分别控制循环的执行和终止,如图:

  按照如图所示,完成表达式的值,For 循环就算完成了(@ErrorCount 是用户自定义变量,需要按照上一课的内容,先定义变量,此处才可以使用)。然后再将需要重复执行的任务,拖入For 循环容器中就可以了。

  (三)Foreach 循环。

  在.net 编程语言中,有一个循环也叫做Foreach ,从语义来讲,这两种循环如出一彻,没有什么差异。在Integration Services 中,Foreach 循环是最重要的一种循环,也是使用最频繁的一种循环,常用于对一个集合对象中的每一个元素,都要进行处理的场景。比如枚举某一个文件夹下的所有文件,枚举一个DataTable 中的某一条记录、枚举一颗树(tree )下的每个结点(Node)等。下面我们将Foreach 最常用的两种类型:Foreach 文件枚举器、Foreach ADO 枚举进行简单的说明。

  Foreach 文件枚举器。

  通常情况下,我们需要循环处理某一文件夹下的每一个文件,这时就需要用到Foreach 文件枚举器了,比如前面我们说到IISLOG的导入,IisLog 文件很多,每天都会产生很多个这样的文件,如果靠手工一个一个地处理,将很不现实,工作量非常大,如果我们用Foreach 文件枚举器,就会非常简单。如图,打开Foreach 循环编辑器:

  Enumerator:Foreach 枚举类型。在Foreach循环中,有很多种枚举类型,每一种枚举类型,就代表着一种使用场景,它们的使用方法也各不相同。每一种枚举类型的意义及使用方法,请参考官方文档:http://technet.microsoft.com/zh-cn/library/ms187670(SQL.90).aspx 这里有非常详细的说明。

  我们选择“Foreach 文件枚举器”,然后在枚举器配置项中,输入文件夹的位置(注意这里是文件夹的位置,而不是文件的位置),输入文件名通配符(如*.log

*.txt 等),其它按照默认设置就可以了,如果需要遍历文件夹下的子目录,请勾选“遍历子文件夹”选项。

  下一步,选择“变量映射”,如图:

  点击“确定”,回到控制流开发面板。

  最后,在“连接管理器”中,找到映射log 文件的平面文件连接(IisLog),设置属性Expressions 的ConnectionString =User::LogFile。

  Foreach 文件枚举器就算完成了,F5就可以达到你你想要的效果了。结果如下:

  其中的“文件系统任务”是将处理完成的文件复份到另外一个文件夹,或者删除,以免重复执行。

  Foreach ADO 枚举器:枚举表或者表中每一行记录。

  这种枚举器在日常开发过程中,也用得非常普遍,类似于TSQL中的游标,先Select 出一批数据,存储在ADO记录集中,然后再一行一行地处理。

  假设有一个商业公司,它在全国或者全市的各个地方,都有连锁专卖店,每个专卖店都是通过POS进行销售和收银,为了保证前端销售快速稳定地运行,POS系统一般都采用C/S模式,数据与系统程序都存储在本地。集团公司的中高层主管为了随时了解各专卖店销售经营情况,就需要定时或者不定时地将专卖店的数据同步到总部数据中心。

  如果我们对每个专卖店DB,都建立一个链接,再建立一个对应的同步任务,随着专卖店的增加,同步任务也随之增加,到最后,功能类似的同步任务就会越来越多,而且每增加一个专卖店,ETL包都要增加一个任务,管理起来,将非常困难。

  根据我的经验是,在总部数据中心建立一张表,专门配置各专卖店DB的链接凭证(ConnectionString), 在同步时,先Select 出各DB的ConnectionString ,然后再动态创建DB连接。这样一来,程序就小巧、稳定多了。下面我们来看看如何实现这一需求:

  首先,定义两个变量,一个于用存储ConnectionString(字符型);一个用于存储ADO 记录 集(Object 型)。如图:

  然后在控制流中增加一个SQL任务,配置如下:

  Connection:选择“数据中心”的链接器。

  SQLStatement: 输入如下SQL,以取出所有配置记录。

代码

SELECT 'Data Source=' + strDBServerIP + ';User ID=' + strDBUserID + 
       ';Initial Catalog=HumanResource;Provider=SQLNCLI10;Auto Translate=True;' AS 
       ConnectionString      
FROM   DbConfig

  ResultSet :选择“完整结果集”。

  然后切换到“结果集”,配置结果集选项,如图:(注意:User::DataSet 一定要是Object 类型的变量,其它变量都不可用)

  点击“确定”,就完成了各DB的连接配置,下面就看Foreach ADO 循环如何来应用这个结果集了。

  找开Foreach 循环编辑器,在Enumerator 中选择“Foreach Ado 枚举”,如图:

  请注意如图所示的每一个选项,如果选错,都可能达不到你想要的效果。

  变量映射,如图:

   最后一步,就是将变量映射到OLE DB 的连接上了,从连接管理器中,选择 DB连接,右击配置Expressions属性的ConnectionString =User::ConnectionString ,如图:

   整个Foreach ADO 循环完成了,F5一切如你所愿,绿油油的一遍就会呈现在你的眼前。

  常用的三种容器就介绍完了,当然还有一些其它容器,比如一个包,是一个容器,一个分组(在控制流中选择一批任务,右键菜单“分组”,就可以将这批任务放在一个Group 内)也是一个容器,但是这些容器都非常简单,就此略过,不做详细说明。

  在Inegration Services 中,容器还可以嵌套,每个容器都可以相互嵌套,它们可以有各自的作用域,有各自的命名空间,如果我们善加利用,将会为Integration Services 的结构化开发,提供很多的方便。

导读:

SSIS 学习(1) 概要

SSIS 学习(2):数据流任务(上)

Integration Services学习(3):数据流任务(下)

Integration Services 学习(4):变量和表达式

Integration Services 学习(5):容器相关推荐

  1. Integration Services包部署常见问题汇总 (转自游子吟)

    Integration  Services 包在部署过程中,经常会出现这样那样的问题,让人摸不着头脑,很是烦人.下面我就将我在部署过程中,遇到的一些问题整理出来,以供大家参考. (一)SSIS包在SQ ...

  2. ETL学习之四:SQL Server Integration Services入门

    ETL学习之四:SQL Server Integration Services入门 SSIS就是微软在SQL SERVER2005上对DTS的升级,不得不说,微软在BI上是花了很大功夫的,包括提供了S ...

  3. ETL学习之五:创建新的 Integration Services 项目

    在 Microsoft SQL Server 2005 Integration Services (SSIS) 中创建包的第一步就是创建一个 Integration Services 项目.此项目包含 ...

  4. 【译】第十篇 Integration Services:高级事件行为

    本篇文章是Integration Services系列的第十篇,详细内容请参考原文. 简介 在前一篇, we introduced fault tolerance by examining metho ...

  5. SQL Server 2005 Integration Services (SSIS) (3)–Business Intelligence Development Studio (BIDS)

    转自 http://hi.baidu.com/ljghcg/blog/item/34b9998b2358bcd6fd1f10ea.html 在上一节中,我们介绍了利用 SQL Server 导入/导出 ...

  6. SQL Server 2005 Integration Services (SSIS) (2) - 导入/导出向导

    下面通过一个例子,利用最新的SQL Server 2005 Export/Import 向导来建立一个简单的SSIS Package (包),这个SSIS将把SQL Server 2005 自带的Ad ...

  7. [译]Stairway to Integration Services Level 13 - SSIS 变量回顾

    介绍 在前一篇中我们组合了已经学过的事件冒泡 event bubbling, 日志记录 logging, 和父子模型 Parent-Child pattern 建立了自定义的SSIS包日志记录. 本文 ...

  8. [译]Stairway to Integration Services Level 10 - 高级事件活动

    介绍 在前一篇文章中我们介绍了故障容差相关的 MaximumErrorCount 和 ForceExecutionResult 属性.  同时我们学习了SSIS Control Flow task e ...

  9. SQL Server Integration Services 包的开发与部署初探

    说到数据库之间的数据同步,我们经常会结合的SQL Server 2000中的DTS和作业功能来实现按时.按条件的数据传输.但是SQL Server 2005 以后,不再支持SQL Server 200 ...

  10. 学习Docker容器时,错误bash: ping: command not found的解决方法

    问题描述: 学习Docker容器时,在容器内进行ping时出现错误,提示如下:bash: ping: command not found 解决方法: 直接安装即可,命令如下:apt-get insta ...

最新文章

  1. python:Json模块dumps、loads、dump、load介绍
  2. 深度学习在搜索业务中的探索与实践
  3. 树莓派进阶之路 (037) - 设置树莓派3 B+的静态IP
  4. vs编译慢原因和解决方法
  5. C#调用Power Shell 管理Office365 执行脚本时遇到的问题
  6. 股票和基金,哪个适合打工族?
  7. Mac卸载Anaconda
  8. 虚拟机文件上传至dsm服务器,群晖还可以这样玩!VMM虚拟机无损尝鲜DSM7.0
  9. matlab图像取样和量化,一文看懂数字图像的取样和量化
  10. 2021届校招求职计划、总结
  11. 计算机视觉论文-2021-07-30
  12. cta 音频测试_CTA入网认证一般测试哪些项目流程
  13. 金融知识普及知识竞赛
  14. 低成本快速上链 智臻链开放联盟网络正式对外开放
  15. 制作esp32-cam拍照上传,微信小程序照片显示的监控小车
  16. day40 ORM sqlalchemy
  17. 阿里的“无用”和“有用”
  18. 2.Java基础数据类型
  19. 时无英雄,使竖子成名!
  20. 1个神经元 传两个神经元_硅神经元

热门文章

  1. 算法总结之 将单链表的每K个节点之间逆序
  2. MVC源码解析 - UrlRoutingModule / 路由注册
  3. maven install 读取jar包时出错;error in opening zip file
  4. MVC 异常处理机制
  5. (转)Emmet(Zen Coding)官方文档 之缩写语法
  6. 2011-8-4 今天完成了去掉上传文件(input type=file)的框框 哎 人家客户不要框框。...
  7. PHP Filter 简介
  8. jquery validate使用笔记
  9. 利用iMazing备份功能替换游戏存档
  10. EasyRecovery软件帮你快速恢复图片数据