在SQL Server中实现对称差异?

时间:2020-03-05 18:54:53  来源:igfitidea点击:

这是我在工作中一直试图解决的问题。我不是数据库专家,所以也许这有点夸张。对不起。

我有一个给定的数据库D,该数据库已在另一台机器上复制(可能是可疑的方式),结果是数据库D'。检查数据库D和D'实际上是否完全相同是我的任务。

当然,问题是如果没有,该怎么办。为此,我的想法是在每个对应的表上运行对称差异,并查看差异。

有大量的表,所以我不希望手动运行每个对称差异。然后,如何实现可以在任意表上运行而不必显式枚举列的对称差异"函数"(或者存储过程,或者我们想要的任何东西)?

它在Windows上运行,如果我们不遵循,对冲基金将会爆炸。祝你好运。

解决方案

回答

我的第一个反应是建议以非可疑的方式再次复制到另一台计算机。

如果不是这样,那么Red Gate可用的某些工具可能会满足需求。

(我与Red Gate没有任何关系,只记得Joel提到了他们的工具在播客中的出色表现。)

回答

使用Red Gate的SQL比较工具。它比较示意图,而SQL数据比较工具则比较数据。我认为我们可以为他们免费试用,但是如果这是一个反复出现的问题,我们也可以购买它们。可能有像这样的开源或者免费工具,但我们也可以只获得一个。

回答

这是解决方案。示例数据来自SSRS 2008 R2随附的ReportServer数据库,但是我们可以在任何数据集上使用它们:

SELECT s.name, s.type 
FROM 
(
    SELECT s1.name, s1.type
    FROM syscolumns s1
    WHERE object_name(s1.id) = 'executionlog2'
    UNION ALL 
    SELECT s2.name, s2.type
    FROM syscolumns s2 
    WHERE object_name(s2.id) = 'executionlog3'
) AS s 
GROUP BY s.name, s.type   
HAVING COUNT(s.name) = 1