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 Output
和 Lookup 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
,您可以合并两个数据集。 (更新、插入、删除、合并,您可以根据需要使用)。
我有一个 SSIS 包,我在其中从平面文件读取记录并将它们存储在记录集中。是否可以将记录集中的值与数据库 table 中的值进行比较并更新 table?
我正在使用 SQL Server 2008 R2 和相同版本的 SSIS。
通常我使用 Lookup
-组件和选项 Redirect rows to no match output
。
之后你可以使用两个名为 Lookup No Match Output
和 Lookup 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
,您可以合并两个数据集。 (更新、插入、删除、合并,您可以根据需要使用)。