我有一个数据流的过程,其中我有一个OLEDB源和目的地OLEDB象下面这样:
源从两个临时表合并数据和返回结果集(比如说,50K行)。 这些50K行存在于目标表很好,但都是旧数据。
SELECT * FROM staging1
UNION
SELECT * FROM staging2
一般来说,在OLEDB目的地,我们插入从源到目标表中返回的数据集,但对我来说我有这些新的50K行更新旧50K行。
批量更新的种类。
任何人都可以请让我知道我该怎么做呢? 我感谢您的帮助。
我有一个数据流的过程,其中我有一个OLEDB源和目的地OLEDB象下面这样:
源从两个临时表合并数据和返回结果集(比如说,50K行)。 这些50K行存在于目标表很好,但都是旧数据。
SELECT * FROM staging1
UNION
SELECT * FROM staging2
一般来说,在OLEDB目的地,我们插入从源到目标表中返回的数据集,但对我来说我有这些新的50K行更新旧50K行。
批量更新的种类。
任何人都可以请让我知道我该怎么做呢? 我感谢您的帮助。
你不能用OOB组件的数据流任务中做SSIS批量更新。
一般模式是,以确定您的插入,更新和删除,并推动更新和删除临时表(S)和数据流任务后,使用基于集合的更新或在执行SQL任务删除。 看看安迪伦纳德的楼梯到集成服务系列 。 滚动约3/4的一路下跌的文章“基于集合的更新”中看到的格局。
舞台数据
基于集合的更新
你会与使用这样的模式获得更好的性能OLE DB Command
转换为任何东西,但琐碎的数据。
如果你到第三方工具,我相信CozyRoc,我知道PragmaticWorks有一个合并目标的组成部分。
使用Lookupstage来决定是否插入或更新。 检查此链接获取更多信息- http://beingoyen.blogspot.com/2010/03/ssis-how-to-update-instead-of-insert.html
步骤做更新:
在自定义属性选择的SqlCommand和INSERT,UPDATE命令例如:
UPDATE table1的SET COL1 =?,COL2 =? 其中id =?
的确切顺序地图列从源到输出作为更新命令
好了,找到了解决我的问题; 更新使用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