在SSIS OLEDB目的地更新行(Update Rows in SSIS OLEDB Destin

2019-07-29 08:33发布

我有一个数据流的过程,其中我有一个OLEDB源和目的地OLEDB象下面这样:

源从两个临时表合并数据和返回结果集(比如说,50K行)。 这些50K行存在于目标表很好,但都是旧数据。

SELECT * FROM staging1
UNION
SELECT * FROM staging2 

一般来说,在OLEDB目的地,我们插入从源到目标表中返回的数据集,但对我来说我有这些新的50K行更新旧50K行。

批量更新的种类。

任何人都可以请让我知道我该怎么做呢? 我感谢您的帮助。

Answer 1:

你不能用OOB组件的数据流任务中做SSIS批量更新。

一般模式是,以确定您的插入,更新和删除,并推动更新和删除临时表(S)和数据流任务后,使用基于集合的更新或在执行SQL任务删除。 看看安迪伦纳德的楼梯到集成服务系列 。 滚动约3/4的一路下跌的文章“基于集合的更新”中看到的格局。

舞台数据

基于集合的更新

你会与使用这样的模式获得更好的性能OLE DB Command转换为任何东西,但琐碎的数据。

如果你到第三方工具,我相信CozyRoc,我知道PragmaticWorks有一个合并目标的组成部分。



Answer 2:

使用Lookupstage来决定是否插入或更新。 检查此链接获取更多信息- http://beingoyen.blogspot.com/2010/03/ssis-how-to-update-instead-of-insert.html

步骤做更新:

  1. 拖动OLEDB命令[代替OLEDB目的地]
  2. 转到属性窗口
  3. 在自定义属性选择的SqlCommand和INSERT,UPDATE命令例如:

    UPDATE table1的SET COL1 =?,COL2 =? 其中id =?

  4. 的确切顺序地图列从源到输出作为更新命令



Answer 3:

好了,找到了解决我的问题; 更新使用SQL查询和SQL任务在SSIS像下面的所有行。 可以帮助别人,如果他们在未来面临着同样的挑战。

update Original 
set Original.Vaal= t.vaal 
from Original join (select * from staging1  union   select * from staging2) t 
on Original.id=t.id


文章来源: Update Rows in SSIS OLEDB Destination