我是 SSIS 新手,需要这方面的帮助。我找到了一个article http://consultingblogs.emc.com/jamiethomson/archive/2006/09/12/SSIS_3A00_-Checking-if-a-row-exists-and-if-it-does_2C00_-has-it-changed.aspx它描述了如何检测存在的行和已更改的行。我缺少的部分是如何更新更改的行。我发现一些文章说删除已更改的记录并插入新记录集也是一个很好的解决方案。问题是我不知道如何执行删除步骤(红色框)。
有什么建议么?
如果您必须删除其中的行数据流任务,那么你需要使用OLE DB Command
转换并编写 DELETE 语句,例如DELETE FROM dbo.Table WHERE ColumnName = ?
。然后,在 OLE DB 命令转换的列映射中,您将把问号表示的参数与来自上一个转换的数据进行映射。在您的例子中,数据来自 Union All 2。
但是,我不会推荐该选项,因为OLE DB 命令对每一行执行,如果行太多,它可能会减慢你的包的速度。
我会推荐这样的东西:
重定向输出Union All 2
到临时暂存表(例如dbo.分期) using OLE DB 目标.
让我们假设您的最终目标表是dbo.目的地。现在,您的暂存表包含应从表 Destination 中删除的所有记录。
On the 控制流选项卡,放置一个Execute SQL Task
之后Data Flow Task
。在执行 SQL 任务中,编写 SQL 语句或使用调用 SQL 语句的存储过程来连接暂存和目标之间的记录,以从目标表中删除所有匹配的行。
另外,在数据流任务之前放置另一个执行 SQL 任务。在此执行 SQL 任务中,从临时表中删除/截断行。
像这样的事情可能可以删除行:。
DELETE D
FROM dbo.Destination D
INNER JOIN dbo.Staging S
ON D.DestinationId = S.StagingId
希望有帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)