在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