首页 > 代码库 > (转)SSIS_数据流转换(Union All&合并联接&合并)

(转)SSIS_数据流转换(Union All&合并联接&合并)

Union All : 与sql语言 Union All 一样,不用排序,上下合并多个表。Union All转换替代合并转换:输入输出无需排序,合并超过两个表

合并联接 : 有左连接、内连接、完全连接,只能关联两个表,连接前先排序。

合并 : 与sql语言 Union 一样,合并前先排序,上下合并两个表


在数据库中创建一个表。并创建3个TXT文件,分别用于保存结果。

 

姓名 课程分数
张三语文90
张三数学83
李四语文74
李四数学84
李四物理94



在项目中创建一个【数据流任务】,数据流如下



说明:

数据源【OLE DB 源】取出的数据为:

 

姓名 课程分数
张三语文90
张三数学83
李四语文74
李四数学84
李四物理94

组件【多播】的功能是:将其输入分发到一个或多个输出,每个输出都与输入一样。

因此第一个多播名称【多播 张三李四】分发出去的内容与上表一样。

每个组件我都用数据表中的姓名(张三、李四)做名称,方便查看。


组件【条件性拆分】设置如下,姓名等于“张三” 的和 姓名不等于“张三” 的分别输出到两个多播中。



其中,组件【多播 只有张三】的内容为:

 

姓名 课程分数
张三语文90
张三数学83


组件【多播 只有李四】的内容为:

 

姓名 课程分数
李四语文74
李四数学84
李四物理94


A . 接下来,先看组件【Union All】,是【多播 张三李四】和【多播 只有张三】两个数据的内容上下合并,理论结果

 

姓名课程 分数
张三语文90
张三数学83
李四语文74
李四数学84
李四物理94
张三语文90
张三数学83


B. 再看组件【合并联接】,是【排序_张三李四】和【排序_李四】两个表数据排序后合并连接。合并方式如图:

连接类型为:左外部连接。左边为【排序_张三李四】,为第一个输入。

条件为(相当于): ON A.名称=B.名称 AND A.课程=B.课程

输出名称重新定义。



输出理论结果为:(排序是按组件【排序_张三李四】的排序结果)

 

姓名左课程左分数左姓名右课程右分数右
李四语文74李四语文74
李四数学84李四数学84
李四物理94李四物理94
张三语文90nullnullnull
张三数学83nullnullnull


C. 最后为组件【合并】,合并是【合并联接】后与【多播 只有张三】排序后的合并。

第一输入为【排序_张三李四左连接】,因为其有多列(5行6列),以此数据结构为准。

第二输入为【排序_张三】(2行3列)

合并转换如图:



可以看出,【排序_张三】列数不够,所以与上表合并时<忽略>,即无任何值。union是排序合并,理论结果为:

 

姓名左课程左分数左姓名右课程右分数右
李四数学84李四数学84
李四物理94李四物理94
李四语文74李四语文74
张三数学83nullnullnull
张三数学83nullnullnull
张三语文90nullnullnull
张三语文90nullnullnull


至此,设计完成,现在编译!可看到数据流传递的行数。结果如图:







转: http://blog.csdn.net/kk185800961/article/details/12378981

(转)SSIS_数据流转换(Union All&合并联接&合并)