由于您需要来自系统A的全部交易,因此您可以根据来源限制您的选择。我建议将这些数据下拉到原始文件目的地。这会在开发时帮助你,因为你可以不需要重新调整就可以反复运行需要这些数据的任务。另外,请确保源数据按源机器排序。除非您使用第三方组件(在某些情况下这可能是限制职业生涯的决定),SSIS在排序方面非常薄弱。
无论如何,让我们假设你有那个排序的原始文件。接下来你要做的就是把它作为一个原始文件源放到数据流中。然后,有一个表示系统B的OLEDB(或其他)源。如果你喜欢,也可以使用原始文件。确保系统B的数据使用与系统A相同的列进行排序。
使用IsSorted = True标记源,并在元数据中的适当列上设置SortKey值。这将告诉SSIS数据是预先排序的,它将允许您加入您的关键列。否则,您可能需要等待几天,才能对SSIS进行排序。
将多播添加到系统A和系统B的源中,因为我们希望利用它们两次。
接下来,添加合并连接以将两个原始文件源连接在一起。使系统A成为左输入。系统B将在您将其连接到合并联接时成为正确的输入。 SSIS会自动在上一步中标记的那些已排序列上设置JOIN。将合并连接设置为使用LEFT JOIN。这样,我们可以在系统B中找到不存在于系统B中的行,并且可以比较现有的行以查看它们是否已更改。
接下来,添加一个条件拆分。在那里,你可以根据条件定义2个输出缓冲区。
NewRows:ISNULL(MyRightTable。的PrimaryKey)
UpdatedRows:无论构成更新的行]
默认的输出将采取一切行不符合这些条件2,并且可以安全地忽略。
我们没有完成。
添加另一个合并加入。
这次,从System B的MultiCast输入左边的输入。从系统A的MultiCast输入正确的输入。再次,SSIS将为您设置连接密钥。将合并连接设置为使用左连接。
添加一个条件性拆分下来这个流程,你唯一需要的是这样的:
DeletedRows:ISNULL(MyRightTable.PrimaryKey)
默认的输出将采取所有其他的行,可以忽略。
现在你有3个缓冲区。
其中2个来自您的第一个合并连接,并且代表新行和更新行。 其中1个来自您的第二个合并加入,并表示已删除的行。
采取行动。
我们在源系统和目标系统中讨论了什么样的数据量?目标机器是什么版本的SQL Server(2005,2008,2008R2,2012)?什么版本(标准版,企业版,数据中心版,BI版)? – billinkc 2012-02-21 14:40:04
你关心这个问题吗? – 2012-02-29 17:22:35