SSIS - 插入新行,更新行

5

什么是“最佳”的或推荐的方法来检查哪一行已经改变了,哪些行已经存在?我找到了一些文章,但不确定这些方法是否是最好的:

http://www.ssistalk.com/2007/03/09/ssis-using-a-checksum-to-determine-if-a-row-has-changed/
http://itssmee.wordpress.com/2010/10/03/ssis-insert-and-update-rows-in-a-table-based-on-the-contents-of-a-excel-file/
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

我需要这个用于处理来自25个数据库的大量数据。

编辑:

在这篇文章中... 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还是文章中还有其他方法我没看到的?
1个回答

4

这些链接是最好的。Phil和Jamie在这个领域非常有知识。你唯一的其他真正选择是加载整个表格并使用T-SQL的MERGE命令来找出差异。

Jamie Thomson的帖子有三个输出,最后用Union All连接起来,在你的终端数据库上并没有真正“做工作”。需要明确的是,其中一个输出可以丢弃——因为它是“没有变化”的输出(标记为“Age has stayed the same”)。标记为“New Customers”的输出可能会被路由到OLE DB Destination中。标记为“Age has changed”的输出则会被路由到OLE DB Command转换器中。

现在,OLE DB Command转换器的速度并不快。有一些方法可以解决慢速问题,但通过快速搜索就能为您解决这个问题。


谢谢答复。我编辑了我的问题,您能否请检查一下是否可以帮忙解决? - ilija veselica
修改了答案以澄清在Jamie的示例中应该放什么,而不是“黑洞”Union All组件。 - Todd McDermid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接