通常我们需要从不同的数据库抽取数据到一个集中汇总点,这里使用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
执行结果如上。