-3

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

从另一个数据库更新所有记录的最佳做法是什么,我们可以使用查询单独完成,但这很耗时,而且我们有截止日期。是否有任何替代或最佳方法来实现这一点。

问候

4

1 回答 1

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]

但是您真的想检查为什么您会丢失这些记录。也许还可以将它们插入到日志表中,以确保您可以稍后返回并检查原因。

希望这可以帮助。

于 2017-10-03T20:37:33.423 回答