Расширенное сравнение данных SQL через несколько таблиц - PullRequest
2 голосов
/ 08 мая 2009

Рассмотрим ситуацию ниже.
Две таблицы (A & B) в двух средах (DEV & TEST) с записями в этих таблицах.
Если вы посмотрите на содержание таблиц, вы поймете, что функциональные данные идентичны.
Я имею в виду, кроме значений PK и FK, имя Roger по-прежнему связано с Fruit & Vegetable.

В среде DEV:

Таблица A
1 Роджер
2 Кевин

Таблица B (курсив FK к таблице A)
1 1 Фрукты
2 1 Овощной
3 2 Мясо

В среде TEST:

Таблица A
4 Roger
5 Кевин

Таблица B (курсив FK к таблице A)
7 4 Фрукты
8 4 Овощной
9 5 Мясо

Я ищу инструмент сравнения данных SQL, который скажет мне, что нет разницы в вышеупомянутом случае.
Или, если есть, он будет генерировать сценарии вставки и обновления в правильном порядке (вставьте сначала в A, а затем в B)

Ответы [ 8 ]

1 голос
/ 13 октября 2009

Также вы можете попробовать dbForge Data Compare от Devart. Это позволяет сравнивать данные и устанавливать те последствия действий, которые вам необходимы. Проверьте его производительность и простоту.

1 голос
/ 13 мая 2009

Я нашел это на Red Gate: http://www.red -gate.com / messageboard / viewtopic.php? T = 8401 # top

Я связался с ними, и они сказали, что эта функция будет реализована в следующей версии Data Compare.

0 голосов
/ 07 февраля 2013

Если вы используете SQL Server 2008, вы можете использовать оператор слияния, и он вставит обновление или удаление в зависимости от того, что вы хотите сделать.

0 голосов
/ 13 мая 2010

Попробуйте Анализатор данных SQL . Мне нравится этот инструмент.

0 голосов
/ 30 апреля 2010

Обнаружить любые несоответствия легко с помощью SqlDiffFramework , программы визуального сравнения источников данных (вместо файлов , как в обычной программе сравнения). Как следует из названия, это каркас: вам нужно сравнить два запроса: один для вашей среды DEV и один для вашей среды TEST. В вашем конкретном случае запросы будут идентичны, например:

SELECT A.person, B.foodgroup
FROM A JOIN B on A.IdPerson = B.IdPerson
ORDER BY A.person, B.foodgroup

SqlDiffFramework предоставляет два параллельных инструмента запросов в одном окне. Вы просто указываете одну сторону на базу данных DEV, а другую - на базу данных TEST, а затем выполняете оба запроса, чтобы получить и сравнить данные. (Вы даже можете сохранить снимки, а затем запустить diff для снимков по вашему выбору, чтобы увидеть, как различия, если таковые имеются, появляются со временем.)

Обратите внимание, однако, что SqlDiffFramework не обращается ко второй части вашего запроса, чтобы сгенерировать сценарии, чтобы они соответствовали.

[SqlDiffFramework, версия 1.0, выпущенная 2010.04.29, является открытым исходным кодом и доступна бесплатно.]

0 голосов
/ 08 мая 2009

У меня есть сохраненный процесс, который сравнивает любые две таблицы. Оказывается, это также работает на представлениях. Поэтому я могу сравнить два представления, каждое из которых возвращает «сплющенную» версию схемы. Я могу либо пропустить столбцы, такие как идентификационные / суррогатные ключи, либо дать указание моему процессу игнорировать их.

Что касается вставки, я не уверен.

0 голосов
/ 08 мая 2009

Большинство инструментов сравнения данных позволяют игнорировать столбцы; однако вы хотите, чтобы они не игнорировали столбцы FK, а определяли, что значение Test.TableA 4 равно значению Dev.TableA 1, поэтому первая строка в таблице B совпадает. Это правильно?

Я не знаю ни одного инструмента, который мог бы сделать это. Теперь по второму вопросу: большинство инструментов сравнения данных будут генерировать сценарии в правильном для вас порядке. Вы можете посмотреть в Сравнение данных Redgate .

Если у вас Visual Studio Developer Edition, он поставляется с инструментом сравнения данных (доступен в виде отдельной установки под названием Visual Studio Database Edition)

0 голосов
/ 08 мая 2009

Я использую SQL Compare как часть SQL Toolbelt из Red Gate Software

Я ОЧЕНЬ доволен его производительностью и функциональностью.

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