【问题标题】:SSIS Join Recordset With TableSSIS 使用表加入记录集
【发布时间】:2017-11-16 06:14:46
【问题描述】:

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

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

【问题讨论】:

  • 使用查找来匹配相同的 ID,当匹配时使用 OLE DB SQL 命令更新您的 affteced 行。

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


【解决方案1】:

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

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

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

合并加入

使用您的文件源和目标表作为源,您可以使用合并联接。 DFT 中的逻辑稍微复杂一些,但这是一种基于集合的方法,并且在结果集较大时效果更好。

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

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

临时表

另一种方法是使用临时表来临时存储文件中的记录。在这种情况下,您的 DFT 只需将文件中的记录加载到临时表中,然后使用一个或多个 Execute SQL Task 您可以合并两个数据集。 (UPDATE、INSERT、DELETE、MERGE,你可以根据自己的需要使用)。

【讨论】:

    【解决方案2】:

    通常我使用Lookup-component 和选项Redirect rows to no match output。 之后,您可以使用两个名为 Lookup No Match OutputLookup Match Output 的行集。

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

    【讨论】:

    • 感谢您的回答。我真的很感谢你的时间。让我试试这个,我会回复你的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多