SSIS之 Lookup 组件 以及 Conditional Split 组件

从数据源表 A 中导出数据到目标数据表 B,如果 A 数据在 B 中不存在就插入新数据到B,如果存在就更新B 和 A 表数据保持统一。

类似 Oracle 的Merge into 

总体图是这样

 

 

核心就是 Lookup组件,判定是 match 还是 no match

 

双击打开,第一页 选择缓存类型,默认是全部缓存,意思是读取Connection里设定数据源的全部数据,这样运行更快,链接数据库次数更少。

DB类型选择Ole DB

不匹配的数据定向到no match output

 

 第二页 选择 DB  以及 table 

在这里,我们其实可以选择 SQL查询出的结果集,比如某个时间范围内,这样数据量更小,全部加载到缓存也就更少

 

 第三页 选择栏位链接起来,直接鼠标选中左边栏位,然后按住不松开,移动到右边绑定的栏位就好

一般我们设定的是主键

 

 第四页 如果第一页选择 full cache,那么这里就不用设定了

 

 

手动执行一遍,你会发现 匹配数据 8 笔已更新,不匹配5笔数据已添加

 

如果相同数据在这种情况下,主键相同就进行更新的话,比较浪费资源,数据量较多的时候不应该这样操作。所以这个时候可以添加条件进行判断

 

 首先我们在Look up组件的 Columns 里设定

左边是输入的数据源,右边是关联的表,也就是我们要更新的表。选中条件,作为输入列印。这样我们在控件的输出端 Conditional Split 就可以看到输出的列,绑定的是需要更新表的值

 

 

 如下图所示,可以看我我们在 Look up 里面设定的输出别名

我们可以在Condition里面设定条件,可以设定多个,还有优先级

比如  (_STKNWIP002 != STKNWIP002) && (_STKNWIP007 != _STKNWIP007) && (STKNWIP006 != _STKNWIP006)

意思是关联表的值也就是要更新的表的值,其他值则是源表,也就是输入表的值.

比较输入表的值与更新表的值进行比对,在主键一样的情况下,检查三个栏位的值是否一样,如果全都不一样,则执行关联的 command命令

 

 

 当我们在Conditional Split设置多个条件的时候,当关联command控件时,可以选择相应的优先等级

 

 

 

全部设置完毕,手动执行以下,会看到执行结果

 

 

 

 

在这里,感谢 https://www.cnblogs.com/biwork/p/3296602.html 的文章,讲解的非常清楚

 

posted @ 2021-12-02 09:57  zq爱生活爱代码  阅读(431)  评论(0编辑  收藏  举报