Henry

曾经沧海难为水,除却巫山不是云,取次花丛懒回顾,半缘修道半缘君。

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

 通常我们需要从不同的数据库抽取数据到一个集中汇总点,这里使用SSIS包方式

  例如我们从三个库的B表抽取数据到另一个库的A表

   建表语句: 

 CREATE  TABLE  svrlist
 (
	id INT NOT NULL  IDENTITY(1,1)  PRIMARY  KEY,
	dbname VARCHAR(20)
 )
 
 INSERT INTO  svrlist (dbname)
 SELECT 'db1'
 UNION ALL
 SELECT 'db2'
  UNION ALL
 SELECT 'mhsh_monitor'

  

1.在BIDS中新建Integration Services 项目,在控制流页面拖入【执行SQL任务】,属性设置如下:

2.设置foreach容器

3 在foreach容器中放入一个【数据流任务】,双击数据流任务进入 数据流设计界面,分别在拖入工具箱-数据流源-ole db源, 工具箱-数据流目标-ole db目标

设置如下:

127.0.0.1.db1  读取基础表信息,数据汇总表A的链接信息 设置如下:

LocalHost.db1  源数据链接信息,需要动态读取foreach循环中的 数据库名称 设置如下:

完成,最终结果如下:

图中的序列容器用于启用和禁用内部子容器,脚本任务打印出从foreach中读取的数据库名称。

执行之后数据结果如下:

完毕。

附改进效果:

 如果某一个数据库抽取数据失败,希望foreach容器只记录此DB数据库,跳过此次循环继续下一次只到循环完成,相当于C#中continute效果,默认是遇到错误就停止。

 1.设置foreach容器的ForceExcutionResult属性为Success

 2.设置foreach容器中记录错误的组件ForceExcutionResult为Completion

 3.其他容器默认设置为None

执行结果如上。

posted on 2011-05-12 11:47  Henry.Lau  阅读(1778)  评论(0编辑  收藏  举报