我有一个表A的交易数据库TD。 我有另一个表B的报告数据库RD。 表B在列和列表方面与表A完全相似。数据类型。
我需要将表A复制到表B :
表A的细节: 1)表A是一个交易表,每天都有新的交易。 2)表A每天都有对现有交易的更新,有一个名为 updateddate 的列,如果交易有任何更新,则会更新。
方法我正在关注: 我创建了一个SSIS包来将数据从事务数据库复制到Reporting 数据库第一次,在表格 B 中,我创建了一个名为 RDUpdateddate 的新列,以插入每条记录更新的时间。
我创建了另一个SSIS包,我将其设置为每晚运行的SqlServerJob。 它获取在 RDUpdateddate 之后运行的所有事务并复制它们 到临时表。然后我使用存储过程来插入和更新我的表B.
虽然这种方法有效。我想知道是否有更有效的方法在SSIS包中自己做所有事情
答案 0 :(得分:2)
我通常为这种情况做的是这样的:
如果我很清楚你正在做什么,你就无法确定注册表是否在不使用表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中的值,则评估。
我希望它有所帮助。