SSIS检测更改

时间:2018-09-20 15:20:29

标签: sql-server ssis etl

我目前正在学习有关SSIS的方法。而且我正在寻找做某事的更好方法。

我正在将数据从Oracle数据库加载到SQL Server。

Oracle数据已加载,转换和排序。 SQL Server数据也已加载,排序。

然后将这些放入合并联接(外部)中。

然后发生条件分裂; 如果密钥不在源中,而是在目标中。记录被删除(实际上已存档)。 如果密钥在源中,而不在目标中。记录将沿着要插入的路径发送。

如果它们的键都存在。然后将其发送到另一条路径-这是我的问题所在。

该表有45个字段(不是我的决定!),如果有任何更改,我需要更新记录。目前,我使用“查找”,以一种棘手的尴尬“将名称匹配的位置从左向右拖动”来匹配每个存在的字段。有时也证明它很慢。更不用说可怕的维护了。

简而言之:我在寻找一种方法来正确检查源与目的地之间的差异?当每个字段都可以随时更改时。

谢谢。

2 个答案:

答案 0 :(得分:0)

这是在现场-感谢Veljko89

来源:Union All returns duplicates???

解决方案: 您可以通过两个步骤在SSIS中完成此操作:

  • 使用合并转换(如上所述)
  • 使用SORT转换,并对ContractID上的数据进行排序,确保选中“删除具有重复的排序值的行”复选框。

答案 1 :(得分:0)

假设上一条注释正确无误,该表是否具有“上次更新日期”列,该列的值在每次插入/更新行时都会更改?如果是,那么您的ETL只需要选择'Last Updated Date'大于上一次ETL运行的行,然后使用两列ID和'Last Updated Date'代替所有45列来加入源和目标。

SSIS MERGE组件当然适用于这种情况,但是警告它使用起来非常复杂。 Sentry One(以前为Pragmatic Works)的第三方工具Task Factory($$)也可以使用,使用起来也不那么复杂。

祝你好运。