Повторно создать существующую базу данных сервера SQL программно? - PullRequest
1 голос
/ 22 сентября 2011

Можно ли скопировать и существующую базу данных или сгенерировать sql, а затем запустить ее для базы данных sql, чтобы создать копию существующей базы данных?

Меня не волнуют данные, только схема.

Я хочу сделать это для модульного тестирования. Я знаю, что могу просто использовать sqlite, но мне любопытно, как это все равно будет работать.

У меня нет никаких сохраненных процедур или чего-либо еще, просто таблицы и PK / FK и т. Д.

Полагаю, лучшим способом было бы как-то сгенерировать схему sql, а затем просто запустить ее для базы данных.

Или, если это проще, скопируйте базу данных, а затем обрежьте таблицы.

Примечание: я хочу знать, как это можно сделать программно .

Ответы [ 3 ]

4 голосов
/ 22 сентября 2011

Вы можете создавать сценарии, щелкнув правой кнопкой мыши базу данных -> задачи -> создать сценарии из студии управления sql. В мастере вы можете в дополнительных настройках (в зависимости от версии инструментов управления SQL) выбрать, хотите ли вы схему, данные или оба. enter image description here

UPDATE

Для программного создания базы данных вы можете использовать сгенерированный sql и выполнить его через ADO.NET. Или, если вы используете CodeFirst, он может сделать это автоматически, если вы установите инициализатор CreateDatabaseIfNotExists для контекста в вашем тестовом классе. Вы можете создать контекст CodeFirst из своей базы данных путем обратного инжиниринга существующего приложения, используя Электроинструмент Entity Framework для Visual Studio. В этом случае вам нужно всего лишь указать строку подключения к несуществующей базе данных, и CF создаст ее для вас. Вы также можете указать DropCreateDatabaseAlways, чтобы ваша база данных обновлялась каждый раз, когда вы запускаете тест (аналогично выполнению SQL-запроса каждый раз после добавления отбрасывания для рассматриваемой базы данных к сгенерированному SQL-скрипту) Если вы используете codefirst, вам не нужно создавать сценарии sql.

Если вы предпочитаете какой-либо из этих методов, я могу предоставить вам больше ресурсов, если хотите?

3 голосов
/ 22 сентября 2011

Вы можете сделать это программно в nhibernate.Nhibernate создает все таблицы и отношения в базе данных, которую вы создаете только экземпляр (имя) базы данных на любом сервере базы данных, как Oracle, MySQL, MsSQL ...

Вы можете посмотреть это для получения подробной информации.

1 голос
/ 22 сентября 2011

Вы можете использовать объекты в библиотеке Класс объектов управления SQL Server .

Например, класс База данных реализует IScriptable .Я бы использовал это в качестве отправной точки (но я сам этого не сделал).Возможно, что генерируемый скрипт может иметь слишком много ненужного, и в этом случае вам, возможно, придется перечислять отдельные таблицы и генерировать для них скрипты.

Но SMO всегда является ответом (в наши дни) на«Как мне выполнить задачу управления X для SQL Server?».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...