Как сравнить 2 таблицы программно? - PullRequest
0 голосов
/ 17 августа 2011

Предположения:

  • Один и тот же запрос выполняется в обеих таблицах
  • Обе таблицы находятся в разных схемах
  • Таблицы базы данных являются частью, могут или не могут быть одинаковыми
  • Если базы данных не совпадают, нет гарантии, что их версия или уровень исправления
  • Порядок данных одинаков для обеих таблиц. Данные отсортированы
  • Возможно, что в одной таблице больше столбцов, чем в другой
  • Возможно, в одной таблице больше строк, чем в другой

На мой взгляд, есть 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 ]

2 голосов
/ 17 августа 2011

Мой ответ будет использовать red-gate SqlCompare . У них есть схема и инструмент для сравнения данных, а также инструменты, позволяющие генерировать скрипт, чтобы одна БД выглядела как другая.

У меня нет связи с Red-Gate, кроме как в качестве клиента

1 голос
/ 17 августа 2011

Игнорируя количество различий в столбцах и количестве строк, должны ли данные представлять одну и ту же сущность?

Если это так, я бы начал с большого и продолжил свой путь:

  1. Выясните, какие столбцы находятся в обеих таблицах.
  2. Найдите или определите ключ таблиц.
  3. Выполните несколько SQL-запросов, используя различные объединения, чтобы сказать, какие строки находятся в обеих таблицахкакие строки отсутствуют в каких таблицах и т. д.
1 голос
/ 17 августа 2011

Ммм, с помощью ORM, подобного hibernate, вы можете сравнить свою сущность (Таблицы) как обычные объекты Java (я предполагаю, что вы используете Java здесь).

При этом вы можете написать компаратор, который охватит все ваши предположения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...