В настоящее время мы используем Visual Studio 2010 и SQL Server 2008 R2 - разрабатываем приложения для интрасети ASP.NET, которые используют (несколько) баз данных SQL Server.
Мы храним скрипты (для баз данных) для SQL Server в системе контроля версий отдельно от любых инструментов, таких как SQL Server Management Studio (SSMS) или Visual Studio. То есть у нас есть коллекция текстовых файлов, содержащих скрипты для таблиц, хранимых процедур и т. Д .; и мы проверяем их вход и выход из системы контроля версий непосредственно перед их обновлением (например, в Management Studio) и возвращаем их обратно (а затем используем сценарии в SSMS для обновления базы данных).
Теперь мы хотели бы перейти к более комплексному подходу.
Я прочитал несколько вопросов / ответов в StackOverflow по управлению источниками, связанных с SQL Server (некоторые из них относятся почти к началу StackOverflow), но не нашел каких-либо отличных решений. Кроме того, некоторые записи предшествуют Visual Studio 2010 или SQL Server 2008 или некоторым доступным инструментам.
Я также читал другие статьи на эту тему, такие как статьи Троя Ханта (один пример: http://www.troyhunt.com/2011/02/automated-database-releases-with.html) и статьи К. Скотта Аллена (например: http://odetocode.com/blogs/scott/archive/2008/02/02/versioning-databases-views-stored-procedures-and-the-like.aspx).
).
SQL Server Management Studio имеет концепцию "проекта базы данных", но это, очевидно, устаревшая функция и не рекомендуется для новых разработок.
Подходы, которые мы рассматриваем на данный момент:
(1) Создайте проект базы данных SQL Server 2008 в Visual Studio 2010 и подключите его к системе управления версиями (например, TFS или VSS). [Для этого параметра может потребоваться Premium, Ultimate или Team Database Edition Visual Studio.]
При таком подходе сценарий считается «основным», и из него создается / обновляется база данных для синхронизации с версией сценария.
Желательными функциями этого подхода являются: глобальный поиск, поиск / замена, рефакторинг, предупреждения об отсутствующих индексах или недействительных элементах и т. Д.
Недостатки: нет дизайнера графического интерфейса для таблиц и других элементов, они могут легко потерять данные с некоторыми изменениями в столбцах (поскольку скрипт «alter» удаляет столбец и создает его заново), отсутствует команда «format document» (доступно в Visual Studio для веб-проектов, но не для проектов баз данных).
(2) Использование управления исходным кодом SQL Red-Gate (и сравнения SQL) в SQL Server Management Studio.
Этот подход, по существу, рассматривает базу данных как «главную», и сценарии обновляются на основе изменений в дизайне базы данных. Во многих отношениях это ближе к тому, как работают многие небольшие группы разработчиков.
Основным преимуществом этого подхода является то, что у вас есть все инструменты и конструкторы SSMS.
Недостатки в том, что меньше проверяется целостность проекта, нет поиска / замены или глобального поиска (без установки других надстроек), а сценарии, созданные с использованием SQL Source Control, синтаксически отличаются от сценариев, сгенерированных собственно SSMS или Visual Studio (конечный результат тот же).
=====
Есть ли у вас предложения для альтернативных подходов, есть ли специальные инструменты или утилиты, которые вы используете / предпочитаете для интеграции управления исходным кодом для баз данных SQL Server в SQL Server Management Studio или Visual Studio 2010, и как насчет подходов для обновления / синхронизации обоих разработка и производство баз данных с изменениями?
Я также рассмотрел несколько других программных утилит / инструментов для этой цели (некоторые из них упоминались в других разделах StackOverflow):
SQL Examiner (возможно, хотя это совершенно отдельный инструмент; не интегрирован в SSMS или Visual Studio)
LiquiBase (Apache / Java, пока нет .NET)
NeXtep (пока не поддерживается SQL Server)
DBSourceTools (еще недостаточно интегрировано)