如何比较SQL Server数据库并更新另一个?

时间:2012-04-20 02:50:44

标签: sql-server

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

4 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分: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

使用的实际方法取决于两个表如何相互关联,如何识别匹配的行以及可能的更改源。

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

在这种情况下,下载,安装和测试方案只需要几分钟。

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