Visual Studio

индекс
38,32

Развлекаемся с VS2010 Ultimate: сравнение SQL данных

Играясь с Visual Studio 2010 я обнаружил что Ultimate (и Premium) редакции поставляются с утилитой для сравнения данных и схем SQL, и решил проверить.

Я сделал две базы данных, SourceDB и TargetDB с единственной таблицей Customer. Вот как выглядят данные в таблицах.



Мастер


Далее, я выбрал Compare Data для исходной таблицы в Server Explorer

В появившемся диалоге я выбрал конечную БД и жмакнул Next – я решил оставить все опции отмеченными.

Следующий диалог показал таблицы и представления, которые я хотел бы сравнить – в моем случае, только Customer.


Результат


Теперь самое интересное,

Измененные записи, разумеется, подсвечены.
Кроме записей, которые должны быть обновлены, заметьте, что есть одна запись в исходной таблице, которая должна быть добавлена в конечную и одна полностью идентичная, которая должна остаться неизменной. Посмотрим на них.



Обновление


Но на этом мы еще не закончили. Конечно, я могу обновить конечную БД прямо из VS, для этого у меня есть два пути – сгенерить скрипт или позволить VS2010 обновить данные за меня. Т.к. я все равно просто играюсь с возможностями, я думаю стоит посмотреть оба варианта. Для начала, выберем

Это даст нам сгенерированый Sql скрипт, который и может быть использован для обновления конечно базы. Выглядит примерно так:

Если смотреть глубже… мм… VS отключает FK constraints, выполняет все операции – и включает обратно, отлично.
Т.к. я немного ленивый, я хочу чтобы Visual Studio сделала всю работу за меня – и все, что нужно сделать… кликнуть правой кнопкой и выбрать…

VS2010 покажет диалог подтверждения, я знаю что я делаю, поэтому просто кликну ОК и изменения будут опубликованы в конечной БД.
+21
9 июля 2010, 13:54
12

комментарии (22)

0
olegchir #
теперь еще бы систему контроля версий для базы данных, и будет совсем шикарно :)
+1
ugene #
Используйте Database Project — и будет Вам контроль версий
0
olegchir #
Я немного новичок в VS, поэтому можт чего не понимаю… База данных ведь меняется одновременно с изменением кода. Например, дописали новый класс для ORMа, тут же поменяли БД, сгенерили скрипты миграции может быть. Выделять БД в отдельный проект есть misconception, т.к. они с ОРМом — единое целое. Если кроме нормальной базы есть тестовая (для быстрых юнит-тестов), и изменения надо проводить в нескольких БД одновременно, получается еще более запущено.

Поэтому, хорошо бы иметь контроль версии БД безотносительно текущего проекта.
0
uglock #
Тут зависит от того, что раньше было: курица или яйцо, БД или код использующий БД.
0
olegchir #
У меня TDD, поэтому код.
+3
uglock #
А не зависит от модели разработки, первичным один фиг являются требования.
0
awhiler #
в 2010 есть новый тип проекта для баз данных. По сути в нем описана вся схема, и он умеет ее паристь для инелисенса и контроля ошибок без загрузки всего в субд

Соответсвенно, там есть кнопочка Deploy в бд, которая сравнивает то что есть в проекте с реальной бд и генерит скрипт для изменений. Причем там куча настроек есть как это делать. Эта штука помощнее будет, чем описанная здесь:)
+1
Sapercheg #
А разницу в структурах таблиц она покажет?
+1
alek_sys #
Да, для разницы в схеме есть опция Compare scheme (вместо Compare Data)
0
outcoldman #
очень круто, не знал что это есть в студии, пользовался red-gate
0
A1lfeG #
Строго говоря данная возможность существует и в 2008 студии.
Правда работает только с версией MSSQL <= 2005.

Штуки очень полезные и нужные ))
0
awhiler #
работает и с 2008, надо просто более свежую версию поставить
blogs.msdn.com/b/gertd/archive/2008/11/25/visual-studio-team-system-2008-database-edition-gdr-rtm.aspx
0
A1lfeG #
О как. Спасибо, незнал.
В своё время это остановило от апгрейда БД.
0
awhiler #
Этот функционал был еще в vs 2005 for Database Proffesionals, ну и в ultimate соотв. тоже.
В 2010 ничего нового, на мой взгляд, не добавилось
Во только замечание — если я не ошибаюсь, в 2010 студии это все входит и в Premium версию
0
alek_sys #
Да — но странно, что в VS2008TS нет такого функционала, т.е. только в узкоспецифичной Database ed. — поэтому эта возможность была не на виду (я, например, не знал :) )

В 2010 входит в Ultimate и Premium — об этом идет речь в начале
0
awhiler #
ну это маркетодиды мсфт постарались. Сразу было понятно что Database (да и остальные «ролевые») версия студии в чистом виде и за такие деньги никому не нужна. Вот наконец в 2010 они их и убили, размазав фичи по остальным версиям.
по поводу Ultimate — так заголовок у вас такой:)
0
olegchir #
> маркетодиды мсфт постарались

«маркетроиды» Пруфлинк на Jargon File: www.catb.org/jargon/html/M/marketroid.html

(написал чтобы поправить очепятку + популяризовать JF)
0
Vile #
А как насчет сравнения больших объемов данных (десятки миллионов записей)?
Я в свое время с помощью RedGate SQL Data Compare мержил многомиллионные таблички…
0
alek_sys #
На больших не проверял — но думаю, смержить-то смержит — вопрос времени.
0
Antelle #
Отличный функционал, очень полезный. Столько времени спасает!
Единственное, что мне не очень нравится — когда различие только в триггере на табличке, его можно и не заметить, иконка практически не отличается от той, когда всё одинаково. Но к этому привык быстро
0
nautilus #
DevArt — очень хорошие бесплатные программы для сравнения схем и данных. (не реклама) сам до них пользовался red-gate'ом. эти на русском и бесплатные.
0
alek_sys #
К сожалению, они бесплатны только для личного некоммерческого использования либо для учебных заведений.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.