2014-03-27 46 views
1

我有两个由供应商每晚生成的数据集。这两个表都不包含主键,但行是唯一的。鉴于没有主键,是否有使用SSIS来确定添加,更新或删除了哪些行的方法?我发现的所有信息似乎都指向需要主键。只需对行进行编号就行不通,因为表格每晚都进行重建。被比较ssis确定没有主键的更新行

该表可能是这个样子:

TABLE 1       TABLE2 
Name Facility Access   Name Facility Access 
---- -------- ------   ---- -------- ------ 
Bob NJ   Full SA  Bob NJ   Full SA 
Bob NJ   Full AB  Bob NJ   Full DS 
Bob GA   Full SA  Bob GA   Full SA 
Bob GA   Full AB  Bob FL   Full SA 
Bob CA   Full AA  Janet CA   Full AA 

有没有人遇到过类似的情况吗?我似乎无法找到一种方法来确定是否在没有主键的情况下插入或更新(或删除或更新)了一行。有什么想法吗?

谢谢您的考虑。

+0

在那里是的。由于没有业务关键字,因此您将无法确定此新行是对现有行还是对新行进行更新。你可以在所有键上计算一个hashsum,并至少确定我是否已经有了这些hashsum,然后删除不再存在的内容并添加什么是“新”,但我没有一个优美的模式。除非你把很多咖啡因和粗俗称为模式。 – billinkc

+0

@billinkc您可以每晚创建视图,然后加入视图以查看是否有更新? –

+0

由于行是唯一的,所以在概念上,该行是主键,因此无论物理数据库事件如何,都将只进行插入和删除操作,通过使用合并连接(完全连接)比较整个行可以找到这些操作。 – Jayvee

回答

0

如果我试图留在SSIS中,我会使用Slowly Changing Dimension组件来满足这个需求。选择TABLE2作为目标表后,我将指定所有列形成业务密钥。

这将产生新行和更新行的输出,包括OLE DB目标和OLE DB命令组件。

我会向TABLE2添加另一列以标识“已删除”行,例如, LastUpdateDateTime。我会添加一个下游执行SQL任务来删除或更新这些行。所有这一切,我可能会倾向于一个SQL MERGE解决方案,因为它更灵活和完整。