В настоящее время мы используем 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 или некоторые из доступных инструментов.
Я также читал другие статьи по этой теме, такие как статьи Troy Hunt (один пример: http://www.troyhunt.com/2011/02/automated-database-releases-with.html) и К. Скотт Allen (например: 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.]
Этот подход рассматривает script как "мастер", и база данных создается/обновляется с этой целью для синхронизации с версией script.
Желательными функциями с этим подходом являются: глобальный поиск, поиск/замена, рефакторинг, предупреждения о недостающих индексах или недействительные ссылки и т.д.
Недостатки: нет графического дизайнера для таблиц и других элементов, может легко потерять данные с некоторыми изменениями в столбцах (поскольку "alter" script удаляет столбец и воссоздает его), отсутствует команда "format document" (доступно в Visual Studio для веб-проектов, но не для проектов баз данных).
(2) Использование Red SQL Server Control (и SQL Compare) в 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 (недостаточно интегрированный)