如何更新数据库中与其他数据库相比的所有表?

时间:2017-10-03 20:21:05

标签: sql sql-server database merge bulkupdate

我有一个包含500多个表的数据库,现在有一个来自旧备份的数据库的副本。我们注意到新数据库中有许多丢失的记录,我想从旧数据库中更新?

更新来自其他数据库的所有记录的最佳做法是什么,我们可以使用查询单独执行,但这很耗时,我们有截止日期。有没有替代或最好的方法来实现这一目标。

此致

1 个答案:

答案 0 :(得分:1)

首先要指出的是,这本质上是危险的。

您可能希望在每个表上都有时间戳以获得性能,否则您将遇到潜在的记录冲突问题。如果没有时间戳,您真的要确定您没有identity_inserts,并且数据库备份尚未独立于当前系统写入。

但是如果你有时间戳,或者有保证的方法来识别记录以避免碰撞等,你真的想要自己动手而不是使用其中一种可用的数据比较工具......

您可以使用动态查询编写存储过程,并使用INFORMATION_SCHEMA.TABLES遍历每个表并执行创建的插入语句。

EXEC sp_execute''是动态查询的结构。为查询创建变量,使用游标迭代INFORMATION_SCHEMA_TABLES和INFORMATION_SCHEMA_TABLES以构造SQL语句。

希望这些信息足以帮助您构建动态SQL查询,以便在每个表上有效地执行以下操作:

INSERT INTO TableA(Col1, Col2, ColN) 
SELECT
    Col1, Col2, ColN 
FROM
    OldDatabase.TableA
WHERE
    TableA.[ID or Timestamp] NOT IN OldDatabase.[ID or TIMESTAMP]

但是你真的想要检查为什么你错过了那些记录。也许还可以将它们插入到日志记录表中,以确保您可以在之后返回并查看原因。

希望这有帮助。