SSIS 使用 Table 加入记录集

SSIS Join Recordset With Table

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

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

通常我使用 Lookup-组件和选项 Redirect rows to no match output。 之后你可以使用两个名为 Lookup No Match OutputLookup Match Output.

的行集

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

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

然而,根据结果集的大小,这可能会很慢,因为查找组件将逐行检查每一行,如果您的目标 table 有很多记录,这将需要一些时间。此外,根据查找组件中的缓存设置,它可能会占用大量内存。

还有两种方法可以实现:

合并加入

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

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

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

分期table

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