Все объекты в наших базах данных хранятся в кодовых таблицах, представлениях, триггерах, хранимых процедурах, все - если мы ожидаем найти его в базе данных, то оно должно быть в DDL в коде, который мы можем запустить. Фактические изменения схемы версий - так что в базе данных есть таблица, в которой говорится, что это версия схемы «n», и если это не текущая версия (в соответствии с кодом обновления), мы вносим необходимые изменения.
Мы стараемся выделить триггеры и представления - не будем, хотя мы, вероятно, должны многое сделать с SP и FN - с удалением и повторным созданием кода, который действителен для текущей версии схемы. Соответственно, это должно быть «безопасно», чтобы отбрасывать и воссоздавать все, что не является таблицей, хотя будут проблемы с секвенированием как с падением, так и с созданием, если есть зависимости между объектами. Самое приятное в этом заключается в том, что мы с уверенностью можем привести схему от нового к текущему и иметь уверенность в том, что любой из экземпляр схемы согласован.
Расширение вашего случая, если у вас есть возможность запускать код обновления схемы, включая код для воссоздания всех объектов базы данных в соответствии с текущими определениями, тогда ваша проблема должна существенно исчезнуть ... резервное копирование, восстановление, запуск схемы логика maint. Это будет иметь дополнительную выгоду, что вы можете ввести изменения схемы (таблицы) в dev-серверах и по-прежнему поддерживать одну и ту же логику обновления.
Я знаю, что это не вполне общее решение. И стоит отметить, что он, вероятно, работает лучше с базой данных для каждого разработчика (я старомодный программист, поэтому я вижу все проблемы как имеющие решения на основе кода (- :), но, как общий подход, я думаю, что он имеет значительные достоинства, потому что он дает вы являетесь последовательным механизмом для решения ряда проблем.