更新 SSIS OLEDB 目标中的行

问题描述 投票:0回答:3

我有一个数据流过程,其中有一个 OLEDB 源和一个 OLEDB 目标,如下所示:

Data Flow Task

Source 合并两个临时表中的数据并返回结果集(例如 50K 行)。这 50K 行也存在于目标表中,但是旧数据。

SELECT * FROM staging1
UNION
SELECT * FROM staging2 

通常,在 OLEDB 目标中,我们将返回的数据集从源表插入到目标表,但在我的情况下,我必须使用这些新的 50K 行更新旧的 50K 行。

批量更新。

任何人都可以告诉我该怎么做吗?我感谢你的帮助。

sql-server-2008 ssis
3个回答
46
投票

您无法使用 OOB 组件在数据流任务中的 SSIS 中进行批量更新。

一般模式是识别插入、更新和删除,并将更新和删除推送到临时表,并在数据流任务之后,在执行 SQL 任务中使用基于集的更新或删除。查看 Andy Leonard 的“集成服务的阶梯”系列。滚动文章大约 3/4 到“基于集合的更新”以查看模式。 舞台数据

http://www.sqlservercentral.com/Images/11369.png基于设置的更新

enter image description here使用这样的模式,与使用

OLE DB Command

转换(除了微量数据之外)相比,您将获得更好的性能。

如果您喜欢第三方工具,我相信 CozyRoc 和我知道 PragmaticWorks 有一个合并目标组件。


22
投票
http://beingoyen.blogspot.com/2010/03/ssis-how-to-update-instead-of-insert.html

更新步骤:

拖动 OLEDB 命令[而不是 oledb 目标]
  1. 转到属性窗口
  2. 在自定义属性下选择 SQLCOMMAND 并插入更新命令 ex:
  3. 更新表 1 SET col1 = ?, col2 = ?其中 id = ?

  4. 按照更新命令中的精确顺序将列从源映射到输出

2
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.