Как я могу сгенерировать скрипт моей базы данных как есть?

Моей основной причиной этого является отслеживание изменений схемы базы данных для моего приложения. В SQL Server Management Studio я могу создать сценарий создания, который создает базу данных, но не содержит никаких тестовых данных. В идеале, когда сценарий запускается, он должен УДАЛИТЬ существующую базу данных (при условии, что она уже существует), а затем воссоздать ее, используя этот новый сценарий, содержащий изменения схемы и тестовые данные с моей машины для разработки.

Итак, как я могу сгенерировать скрипт, который создаст базу данных со всеми таблицами, сохраненными процессами, триггерами, представлениями, тестовыми данными и т. д.?

Я пытался использовать функцию импорта/экспорта, но это бесполезно, потому что похоже, что она не копирует хранимые процедуры. Кроме того, было бы неплохо иметь скрипт, чтобы я мог отслеживать изменения в схеме с помощью mercurial.

Я использую SQL Server Express 2008 R2 вместе с SQL Server Management Studio.


person Pete    schedule 29.03.2011    source источник
comment
Вы можете щелкнуть правой кнопкой мыши свою базу данных (в студии управления SQL Server) и выбрать создание сценариев. Там вы можете выбрать каждый аспект базы данных, который вы хотите заскриптовать, включая индексы, триггеры, пользователей, схемы и данные (среди прочего).   -  person Lamak    schedule 29.03.2011
comment
Может быть, я просто туплю, но я пробовал, и в созданном файле вообще нет данных.   -  person Pete    schedule 29.03.2011
comment
вам предоставляется множество вариантов, один из них — заскриптовать данные (по умолчанию эта опция ложна)   -  person Lamak    schedule 29.03.2011
comment
@Lamak Я не вижу такого варианта. На втором экране мастера у меня есть два переключателя: Сценарий всей базы данных и всех объектов базы данных или Выбрать определенные объекты базы данных -> тогда у меня есть дерево элементов в моей базе данных. Я не вижу никаких явных параметров для данных...   -  person Pete    schedule 29.03.2011
comment
Направления Nevermind KD7 были точны   -  person Pete    schedule 29.03.2011


Ответы (6)


Вы не указали, какая версия SQL Server, но в SQL 2008 это очень просто

SQL 2008
Разверните базы данных
Щелкните правой кнопкой мыши базу данных
Выберите «Задачи» > «Создать сценарии»
Откроется диалоговое окно «Создать и опубликовать»
Выберите объекты (например, таблицы, процессы и т. д.)< br/> Нажмите «Далее» в разделе «Настройка сценариев»
выберите «Дополнительные параметры»
В разделе «Общие» выберите «СЦЕНАРИЙ УДАЛИТЬ И СОЗДАТЬ» — «СЦЕНАРИЙ УДАЛИТЬ И СОЗДАТЬ»
«Типы данных для сценария» — «Схема и данные»
Закрыть расширенное окно
Выберите сохранение в файл.

person Ta01    schedule 29.03.2011
comment
Мне немного стыдно, что я не смог найти это. Спасибо большое. - person Pete; 29.03.2011
comment
@Pete - я бы не слишком смущался, так как это довольно скрыто! Это полезная функция, которая должна быть лучше реализована в SSMS. - person David Atkinson; 02.04.2011

Я написал утилиту командной строки с открытым исходным кодом, названную SchemaZen, который делает это. Это намного быстрее, чем создание сценариев из студии управления, и его вывод более удобен для контроля версий. Он поддерживает сценарии как для схемы, так и для данных.

Для генерации скриптов выполните:

schemazen.exe script --server localhost --database db --scriptDir c:\somedir

Затем, чтобы воссоздать базу данных из скриптов, выполните:

schemazen.exe create --server localhost --database db --scriptDir c:\somedir
person Seth Reno    schedule 05.09.2013


Лично я использую проект базы данных Microsoft Visual Studio 2010 с репозиторием системы управления версиями ( SVN) для отслеживания изменений в схеме.

person John Hartsock    schedule 29.03.2011

Следите за различиями в сортировке базы данных. Если вы разрабатываете базу данных с нечувствительной к регистру сортировкой и пытаетесь запустить сгенерированные SSMS сценарии в качестве базы данных с чувствительной к регистру сортировкой, то ошибки в этом случае сломают сценарии.

person David Kaminski    schedule 26.08.2016

Обычно я делаю резервные копии базы данных, прежде чем начинать новую разработку.

лучший способ - восстановить резервную копию, когда это необходимо, я не знаю, как это сделать с помощью скрипта!

person Flavio CF Oliveira    schedule 29.03.2011