0

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

我需要将表 A 复制到表 B 中

表 A 的细节: 1)表 A 是一个事务表,每天都有新的事务添加到其中。2)此外,表 A 每天都会更新现有交易,有一个名为updateddate的列会更新,以防交易有任何更新。

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

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

虽然这种方法有效。我想知道是否有一种更有效的方法可以在 SSIS 包本身中完成所有操作

4

1 回答 1

2

我通常为这种情况做的事情是这样的: 在此处输入图像描述

如果我很好地理解你在做什么,如果你想改变它,如果你想改变它,你不能确定一个寄存器是否改变,而不使用你在表 B 中创建的字段RDUpdateddate ,但我真的不认为是个好主意,你可以在每个表中使用一个哈希字段,只需将其添加到表中的查询中,每次执行包时都必须更新它

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

在条件拆分中,您应该使用表 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 中的值。


我希望它有所帮助。

于 2013-04-24T22:10:19.343 回答