如何以编程方式比较2个表?

时间:2011-08-17 15:05:12

标签: database comparison

假设:

  • 在两个表上运行相同的查询
  • 两个表都位于不同的模式
  • 数据库表是may的一部分,也可能不是同一个
  • 如果数据库不相同,则无法保证其版本或补丁级别
  • 两个表的数据顺序相同。数据已分类
  • 一个表可能比另一个表有更多列
  • 一个表可能有更多行,然后是另一个

我认为有2个不同的挑战

  • 运行比较
  • 制作一份概述差异的清晰报告

我想知道以下方法是否有效

If (table1 and table 2 have the same number of columns) 
  For every row found in table1 check 
     If that same identical row exists in table2
       And if it does not due to some column mismatch
          Find the closes match possible and report column differences
            If best match can be discovered, report column difference, else
               report can result is ambiguous
                  ...

这是一种合理的方法吗?鉴于上述一些假设,您能推荐一种替代方案吗?

3 个答案:

答案 0 :(得分:2)

我的回答是使用red-gate SqlCompare。 它们有一个模式和一个数据比较工具,这些工具还允许您生成脚本以使一个DB看起来像另一个。

除了作为客户之外,我与红门无关

答案 1 :(得分:1)

嗯,在像hibernate这样的ORM的帮助下,你可以像普通的java对象一样比较你的实体(Tables)(我假设你在这里使用java)。

话虽这么说,你可以写一个涵盖你所有假设的比较器。

答案 2 :(得分:1)

忽略列数和行数差异,是否应该代表同一个实体的数据?

如果是这样的话,我会开始变大,然后继续努力:

  1. 找出两个表中的列。
  2. 查找或定义表格的键。
  3. 使用各种联接运行一些SQL查询,以说明哪些行在两个表中,哪些行在哪些表中丢失等等。