1

我目前正在处理一个场景,即我有 2 个 SQL 数据库,我需要比较 2 个数据库中每个表中的数据变化。数据库之间具有相同的确切表,但是每个数据库中可能具有不同的数据。我遇到的第一个障碍是如何比较数据集,我面临的第二个挑战是一旦我确定了差异,我该怎么说,例如更新数据库 2 中可能存在于 1 中的数据丢失。

4

4 回答 4

4

为什么不使用 SQL 数据比较而不是重新发明轮子?它完全符合您的要求 - 比较两个数据库并编写将在任一方向同步的脚本。我为一家与他们的一些工具竞争的供应商工作,它仍然是我推荐的那个。

http://www.red-gate.com/products/sql-development/sql-data-compare/

于 2012-04-20T03:47:39.700 回答
2

比较数据的一个强大命令是EXCEPT. 有了这个,您只需执行以下操作即可比较具有相同结构的两个表:

SELECT * FROM Database1.dbo.Table
EXCEPT
SELECT * FROM Database2.dbo.Table

这将为您提供 Database1 中存在但 Database2 中不存在的所有行,包括两者中存在但不同的行(因为它比较每一列)。然后您可以颠倒查询的顺序以检查另一个方向。

确定差异后,您可以使用INSERTUPDATE将更改从一侧转移到另一侧。例如,假设您有一个主键字段PK,并且新行只进入 Database2,您可能会执行以下操作:

INSERT INTO Database1.dbo.Table
SELECT T2.*
FROM Database2.dbo.Table T2
LEFT JOIN Database1.dbo.Table T1 on T2.PK = T1.PK
WHERE T1.PK IS NULL -- insert rows that didn't match, i.e., are new

实际使用的方法取决于这两个表是如何关联在一起的,如何识别匹配的行,以及更改的来源可能是什么。

于 2012-04-20T02:59:29.033 回答
1

您还可以查看 Visual Studio 2010(Premium 及更高版本)中的数据比较功能吗?我用它来确保我所有环境(即开发、测试和生产)中的配置表是同步的。它让我的生活变得非常轻松。您可以选择要比较的表,可以选择要比较的列。不过,我还没有学会如何保存我的选择以备将来使用。

于 2012-04-20T14:06:54.327 回答
1

您可以使用 SQL Compare 执行此操作,这对于开发来说也非常有用,但如果您想按计划执行此操作,更好的解决方案可能是 Simego 的 Data Sync Studio。我知道它可以在 i3 iMac(bootcamp)上的 16GB 上进行大约 100m(30 列宽)的行比较。实际上,每侧 1m -> 20m 行是很舒服的。它使用列存储引擎。

在这种情况下,下载、安装和测试该场景只需要几分钟。

我希望这会有所帮助,因为我总是寻找问号来弄清楚某人在问什么。

于 2012-04-20T15:49:12.030 回答