我有一个SSIS包,我正在从平面文件中读取记录并将它们存储在记录集中。是否可以将记录集中的值与数据库表中的值进行比较并更新表?
我正在使用SQL Server 2008 R2和相同版本的SSIS。
答案 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 Output
和Lookup Match Output
的行集。
PS。我有三篇关于SSIS的文章,但是他们用俄语(但是有很多SQL脚本和图片)。 如果您感兴趣,可以查看以下链接 - https://habrahabr.ru/post/330618/