将delta从一个数据库复制到另一个数据库的最佳策略

时间:2013-04-24 16:05:28

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

我有一个表A的交易数据库TD。   我有另一个表B的报告数据库RD。   表B在列和列表方面与表A完全相似。数据类型。

我需要将表A复制到表B

表A的细节: 1)表A是一个交易表,每天都有新的交易。 2)表A每天都有对现有交易的更新,有一个名为 updateddate 的列,如果交易有任何更新,则会更新。

方法我正在关注:    我创建了一个SSIS包来将数据从事务数据库复制到Reporting    数据库第一次,在表格 B 中,我创建了一个名为 RDUpdateddate 的新列,以插入每条记录更新的时间。

我创建了另一个SSIS包,我将其设置为每晚运行的SqlServerJob。    它获取在 RDUpdateddate 之后运行的所有事务并复制它们    到临时表。然后我使用存储过程来插入和更新我的表B.

虽然这种方法有效。我想知道是否有更有效的方法在SSIS包中自己做所有事情

1 个答案:

答案 0 :(得分:2)

我通常为这种情况做的是这样的: enter image description here

如果我很清楚你正在做什么,你就无法确定注册表是否在不使用表B中创建的 RDUpdateddate 字段进行更改,如果要更改,但我真的不认为是好主意,你可以在每个表中使用一个哈希字段,只需在表中添加查询而不是fisically,每次执行包时都必须更新。 / p>

之后是连接具有表A的左表以获取寄存器是新的还是旧的,通过使用表B的一个字段来识别该字段,如果该字段为空则是因为它不存在。< / p>

在条件分割中,您应该使用表B的列来了解是否知道,如果已经存在,则首选更新方法。

修改

为了能够比较这两个表,您可以在表A中创建如下的查询:

SELECT id, field1, field2, CHECKSUM(field1, field2) HASH_TOTAL FROM Table_A

表B中的查询如下:

SELECT id, field1, field2, CHECKSUM(field1, field2) HASH_TOTAL FROM Table_B

然后在条件性拆分中,如果值相等,不同或不存在表B中的值,则评估。


我希望它有所帮助。