SSIS加入记录集与表

时间:2017-11-16 06:14:47

标签: sql-server sql-server-2008 ssis ssis-2008

我有一个SSIS包,我正在从平面文件中读取记录并将它们存储在记录集中。是否可以将记录集中的值与数据库表中的值进行比较并更新表?

我正在使用SQL Server 2008 R2和相同版本的SSIS。

2 个答案:

答案 0 :(得分:2)

Leran2002的答案一般是正确的,最直接的方法是将查找组件设置为将行重定向到无匹配输出,然后使用目标和OLE DB命令。

但是,根据结果集的大小,这可能会很慢,因为查找组件将逐个检查每一行,如果目标表有大量记录,这将花费一些时间。此外,根据查找组件中的缓存设置,它可以使用大量内存。

还有两种方法可以实现这一目标:

合并加入

使用文件源和目标表作为源,您可以使用合并连接。 DFT中的逻辑有点复杂,但这更像是一种基于集合的方法,并且结果集很大,它的工作效果更好。

您必须使用条件拆分组件实现必须从文件更新,插入,删除或丢弃记录的逻辑。

我强烈推荐这个问题(不完全是您的问题,但我认为这是一个很好的比较):What are the differences between Merge Join and Lookup transformations in SSIS?

临时表

另一种方法是使用临时表临时存储文件中的记录。在这种情况下,您的DFT只是将文件中的记录加载到临时表中,然后使用一个或多个Execute SQL Task,您可以合并这两个数据集。 (更新,插入,删除,合并,您可以使用符合您需求的内容)。

答案 1 :(得分:0)

Usualy我使用Lookup - 包含选项Redirect rows to no match output的组件。 之后,您可以使用两个名为Lookup No Match OutputLookup Match Output的行集。

PS。我有三篇关于SSIS的文章,但是他们用俄语(但是有很多SQL脚本和图片)。 如果您感兴趣,可以查看以下链接 - https://habrahabr.ru/post/330618/