我有一个包含500多个表的数据库,现在有一个来自旧备份的数据库的副本。我们注意到新数据库中有许多丢失的记录,我想从旧数据库中更新?
更新来自其他数据库的所有记录的最佳做法是什么,我们可以使用查询单独执行,但这很耗时,我们有截止日期。有没有替代或最好的方法来实现这一目标。
此致
答案 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]
但是你真的想要检查为什么你错过了那些记录。也许还可以将它们插入到日志记录表中,以确保您可以在之后返回并查看原因。
希望这有帮助。