У меня есть проект с открытым исходным кодом (лицензия под LGPL), который пытается решить проблемы, связанные с правильной версией схемы БД для (и более) SQL Server (2005/2008/Azure), bsn ModuleStore.
В основном, отдельная часть набора инструментов скриптирует объекты базы данных SQL Server схемы БД в файлы со стандартным форматированием, поэтому содержимое файла изменяется только в том случае, если объект действительно изменился (в отличие от scripting, выполненный VS, который также запускает некоторые даты создания сценариев и т. д., отмечая все измененные объекты, даже если они фактически идентичны).
Но набор инструментов выходит за рамки этого, если вы используете .NET: он позволяет встраивать SQL-скрипты в библиотеку или приложение (в виде встроенных ресурсов), а затем сопоставлять встроенные скрипты с текущим состоянием в базе данных. Изменения, не связанные с таблицей (те, которые не являются «деструктивными изменениями» согласно Martin Fowler's definition), могут применяться автоматически или по запросу (например, создание и удаление объектов, таких как представления, функции, хранимые процедуры, типы, индексы) и сценарии изменения (которые должны быть написаны вручную) могут быть применены в том же процессе; также создаются новые таблицы, а также их установочные данные. После обновления схема БД снова сравнивается с сценариями, чтобы обеспечить успешное обновление БД до того, как изменения будут совершены.
Обратите внимание, что весь код сценария и сравнения работает без SMO, так что у вас нет болезненной зависимости SMO при использовании модуля bsn ModuleStore в приложениях.
В зависимости от того, как вы хотите получить доступ к базе данных, набор инструментов предлагает еще больше - он реализует некоторые возможности ORM и предлагает очень приятный и полезный интерфейсный подход для вызова хранимых процедур, включая прозрачную поддержку XML с помощью родной .NET. XML-классы, а также для TVP (табличные параметры) как IEnumerable<PocoClass>
.
Мне было бы интересно узнать, каким образом этот вопрос позволяет избежать типичной проблемы с закрытым вопросом SO, чтобы быть «субъективным и аргументированным». Возможно, перефразируйте его, чтобы выделить «Кто-нибудь имеет опыт работы с RedGate SQL Compare?» как вопрос, и бросить «настоящих разработчиков» вздор. –