Как лучше всего управлять версиями хранимых процедур моего SQL-сервера?

Как лучше всего контролировать версии моих объектов базы данных? Я использую Visual Studio 2005/2008 и SQL server 2005. Я бы предпочел решение, которое можно использовать с SVN.


person Vijesh VP    schedule 28.09.2008    source источник
comment
Попробуйте этот бесплатный инструмент: http://servantt.com/?so - он позволяет реконструировать ваши объекты, сохраняя в сценарии, сравните базу данных со сценариями, запустите WinMerge для сравнения, обновите сценарии или примените изменения к базе данных.   -  person drizin    schedule 28.01.2016
comment
Аналогичный вопрос stackoverflow.com/questions/115369/   -  person Michael Freidgeim    schedule 10.11.2016


Ответы (10)


Как и ваш другой код, добавьте «Проект базы данных» в решение вашего приложения и сохраните там файлы sql, используемые для создания объектов базы данных. Используйте тот же контроль версий для этих файлов кода, что и для приложения.

person Ron Savage    schedule 28.09.2008
comment
Если вы используете ssms для извлечения ваших объектов db в исходные файлы, будьте осторожны, какая кодировка используется. Возможно, что юникод можно использовать без вашего ведома - по крайней мере, это то, что я испытал. Это может раздражать, когда вы хотите быстро внести изменения в текстовом редакторе и получаете тарабарщину. - person Steve; 23.11.2009
comment
@Steve, ваш редактор - мусор, если он не может обрабатывать Unicode. - person CMircea; 13.04.2010
comment
@Steve - Я не могу себе представить, почему в наши дни вы когда-либо хотели бы использовать что-либо, кроме Unicode. Это ноябрь 2009 года, а не 1989! - person Jeffrey L Whitledge; 30.06.2010
comment
Становится интересным, когда у вас есть разные имена связанных серверов в dev, test, ... - person adolf garlic; 04.08.2010
comment
@adolf - отличный повод не делать этого. :-) В ситуациях, когда я не могу контролировать неудачные архитектурные решения, принятые до меня, я пытаюсь сделать свои сценарии сборки SQL с блоками if exists на основе среды (dev, test и т. Д.) И / или с использованием переменных с динамически встроенный SQL для обработки изменения имен DB, Link или Table между средами. Цель состоит в том, чтобы один и тот же SQL выполнялся во всех средах с минимальными различиями. - person Ron Savage; 05.08.2010
comment
Раньше я использовал похожую технику, когда в скриптах менялись токены в зависимости от среды сборки. Не идеально, но работает. - person adolf garlic; 05.08.2010
comment
@ Стив, но спасибо, что позаботились об этом. Я не понимаю, почему все здесь все время такие грубые. - person xr280xr; 15.05.2012

Посмотрите на инструменты, предлагаемые RedGate. Они специально занимаются случаями резервного копирования / восстановления / сравнения для объектов SQL Server, включая SP. С другой стороны, я не уверен, но я думаю, что Visual Studio позволяет вам проверять sp в репозиторий. Сам не пробовал. Но я могу порекомендовать инструменты RedGate. Они избавили меня от множества неприятностей

person Thomas Wagner    schedule 28.09.2008
comment
Я являюсь менеджером по продукту SQL Source Control, который можно попробовать в раннем доступе. Он работает с SVN и интегрируется с SSMS. Зарегистрируйтесь на red-gate.com/Products/SQL_Source_Control/index.htm. Комментарии приветствуются! - person David Atkinson; 23.02.2010
comment
SQL Source Control 1.0 red-gate.com/products/SQL_Source_Control/index.htm уже отправлен и доступен для оценки / покупки. - person David Atkinson; 30.06.2010
comment
Бесплатная альтернатива RedGate - это бесплатное приложение: servantt.com/?so Оно очень простое в использовании, но делает свою работу очень хорошо. - person drizin; 28.01.2016

Я использую SVN для всей моей системы управления исходным кодом table / sproc / function.

Мне не удалось найти ничего, что отвечало бы моим потребностям, поэтому я написал служебная программа, позволяющая мне выгружать код в красивую структуру каталогов для использования с SVN.

Для заинтересованных теперь исходный код доступен по адресу svn: //finsel.com/public/ VS2005 / GenerateSVNFilesForSQL2005.

person Josef    schedule 29.09.2008
comment
Привет, Джозеф! Я зарегистрировался и попытался загрузить ваш инструмент, он отлично выглядит, но получаю сообщение об ошибке. Не удалось найти файл C: \ DotNetNuke \ Portals \ 0 \ Repository \ InstallSVNFilesForSQL2005.3a21c4ac-399a-4006-9057-d9f409e13ce3. zip '. с вашего сайта? Есть ли шанс, что вы выпустите исходный код для этого? - person Kieran Benton; 07.03.2009
comment
Вскоре после того, как я восстановлю свой сайт, я отправлю код в свой общедоступный SVN. - person Josef; 10.03.2009
comment
@Josef - я не могу получить доступ к вашему svn-серверу или к вашему коду - он все еще активен? Могу я как-нибудь получить код? - person Conrad; 10.03.2012
comment
Другой альтернативой является бесплатное приложение: servantt.com/?so - person drizin; 28.01.2016

Мы используем Subversion, и все, что мы делаем, - это сохраняем код sql в каталоге для нашего проекта Subversion, а затем фиксируем код в репозитории, когда мы будем готовы, и обновляем его из репозитория, прежде чем мы начнем работать над чем-то, что уже там есть.

Настоящая уловка - убедить разработчиков сделать это. Наши базы данных делают это, периодически удаляя все сохраненные процедуры (или другие объекты базы данных), которых нет в Subversion. Проигрывайте что-то один раз, и почти никто не делает этого снова.

person HLGEM    schedule 28.09.2008
comment
Вашим администраторам баз данных понравится это бесплатное приложение, которое делает именно то, что они делают вручную: servantt.com/?so - person drizin; 28.01.2016
comment
Да, сейчас поступаю так же. Но я ищу что-то, что автоматически хорошо интегрируется с изменениями в схеме базы данных, представлении и хранимой процедуре. Я думаю, что первый код Entity Framework будет лучше обслуживать весь проект (код + db). - person sky91; 09.10.2019

Я не знаю готового решения, извините ...

... но не могли бы вы просто небольшой скрипт, который подключается к базе данных и сохраняет все хранимые процедуры на диск в виде текстовых файлов? Затем сценарий добавит все текстовые файлы в репозиторий SVN, выполнив системный вызов svn add.

Тогда вы, вероятно, захотите, чтобы другой скрипт подключился к БД, отбросил все хранимые процедуры и загрузил все хранимые процедуры репозитория с диска. Этот сценарий нужно будет запускать каждый раз, когда вы запускаете "svn up" и получаете новые / измененные хранимые процедуры.

Я не уверен, что это можно сделать с помощью MS SQL, но я вполне уверен, что MySQL это приспособит. Если писать расширения SVN для этого слишком сложно, Capistrano поддерживает сценарии проверки / проверки, IIRC.

person paxos1977    schedule 28.09.2008

Лучший способ - тот, который работает на вас.

Самый простой способ - тот, которого на данный момент не существует.

Мы используем полуавтоматический метод (сценарии в системе управления версиями, небольшое подмножество людей, способных развертывать хранимые процедуры на производственном сервере, изменения схемы должны отражаться в изменениях в базовых файлах, проверенных в файлах) .

Что мы должны сделать, так это реализовать какой-то контроль версий по сравнению с разницей в дампе схемы открытого текста ... но обычно это «работает для нас», хотя в большинстве случаев это действительно ошибка.

person Unsliced    schedule 29.09.2008

Я согласен с тем, что по возможности вы должны использовать проекты баз данных для версии вашей базы данных вместе с исходным кодом приложения.

Однако, если вы работаете в корпоративном сценарии, вам также следует рассмотреть возможность использования инструмента для отслеживания изменений на сервере и версии этих изменений. Тот факт, что проект базы данных существует, не означает, что какой-либо администратор или разработчик не может изменить эти sprocs на сервере.

person Brian Vander Plaats    schedule 19.05.2010

Мы делаем дампы в открытый текст и храним их в нашей VCS.

Вы могли бы написать сценарий резервного копирования и фиксации, чтобы сделать что-то подобное.

person Oli    schedule 28.09.2008

Я использую scriptdb.exe из http://scriptdb.codeplex.com/

И может быть полезно использовать рельсы: http://code.google.com/p/migratordotnet/wiki/GettingStarted

person Andreas Rehm    schedule 30.06.2010