Я задал похожий вопрос некоторое время назад на форумах MSDN , и мне сказали, что рекомендуемый способ сделать это - использовать VSDBCMD. По сути, вы выводите файл схемы из своего проекта базы данных, который содержит всю информацию о вашей базе данных, а затем запускаете VSDBCMD для сравнения вашей схемы с целевой базой данных. Это, в свою очередь, создает скрипт для обновления целевой базы данных до вашей текущей схемы.
Обоснование этого подхода заключается в том, что только потому, что вы и я можем думать, что мы знаем, как выглядит схема целевой базы данных, мы не можем быть уверены, пока не позволим VSDBCMD выполнить сравнение. Кто знает, кто-то другой мог изменить схему в целевой базе данных без нашего ведома, поэтому наш скрипт изменения может закончиться с ошибкой по неизвестной причине.
Я действительно не был ужасно удовлетворен этим подходом и в итоге продолжал использовать мой «старый подход» ручного кодирования моих сценариев изменений, когда это необходимо, но я очень хочу увидеть, изменилось ли что-нибудь в 2010 году, что делает это немного легче работать. Мне бы очень хотелось увидеть простой API, который делает то, что делает VSDBCMD, чтобы я мог собрать GUI вместе, чтобы упростить обновление целевой (в моем случае, клиентской) базы данных, при этом человек, выполняющий обновление, не должен быть администратором баз данных.