Мы записываем каждое изменение DDL в БД, и когда мы делаем «релиз», мы объединяем их в один сценарий «обновления» вместе со всеми хранимыми процедурами, которые изменились «с прошлого раза»
У нас есть таблица, в которой хранится номер версии последнего примененного исправления, поэтому инструменты обновления могут применять любые более новые исправления.
Каждая хранимая процедура находится в отдельном файле. Каждый из них начинается с оператора «insert» в таблице журналов, в которой хранятся имя SProc, версия и «сейчас». (На самом деле SProc выполняется для сохранения этого, это не необработанный оператор вставки).
Иногда во время развертывания мы вручную меняем SProc или коэффициенты развертывания из DEV, а сравнение журнала в клиентских базах данных TEST и PRODUCTION позволяет нам проверить, что все в одной версии.
У нас также есть основная база данных "release", к которой мы применяем обновления, и мы используем восстановленную резервную копию этой базы данных для новых установок (экономит время выполнения сценариев, которое, очевидно, увеличивается со временем). Мы обновляем это как & когда, потому что, очевидно, если оно немного устарело, можно применить более поздние патчи-сценарии.
Наша база данных Release также содержит очищенные начальные данные (которые удаляются, а иногда принимаются и изменяются до запуска новой установки - так что это не входит ни в какие сценарии обновления)
SQL Server имеет кнопку на панели инструментов для написания сценария изменения, так что вы можете использовать инструменты GUI для внесения всех изменений, но вместо их сохранения вместо этого создайте сценарий. (на самом деле, есть флажок для всегда генерации скрипта, поэтому, если вы забудете и просто нажмете SAVE, он все равно даст вам скрипт, который он использовал после факта, который можно сохранить как файл патча)