Как сбросить базу данных Sql Server 2008?
Я хочу сбросить базу данных sql server 2008, как при ее первом создании. все удостоверения должны быть сброшены. Все данные в базе данных должны исчезнуть. Есть ли способ сделать это?
4 ответов
вы можете написать сценарий для удаления всех данных из таблиц и сброса значений идентификаторов (с помощью DBCC CHECKIDENT). Для этого существует несколько сценариев, поэтому я не буду изобретать колесо - вот пример.
Как только у вас будет чистая база данных, я бы предложил создать ее резервную копию - тогда каждый раз, когда вы хотите сбросить, чтобы очистить снова, вы можете просто восстановить из резервной копии.
кроме того, я бы рекомендовал вам сохранить полные сценарии создания для вашей базы данных. Что тогда бы дали другой вариант-отбросить базу данных и создать заново из этих скриптов.
Reseed
используйте эти пары операторов для всех таблиц данных. Не забудьте оставить таблицы поиска в покое (например, какие-то типы). Вероятно, они должны оставаться заполненными, потому что другие таблицы данных полагаются на их значения.
truncate table table_name;
dbcc checkident (table_name, reseed, 0); /* next ID will be 1 */
предложение разработка
Я предлагаю, пока вы разрабатываете свое приложение (если это то, что вы делаете, так как вы задаете вопрос о stackoverflow), также скрипты управления версиями DB. Обычно я определяю эти DB скрипты:
- Drop DB
- создать модель
- создать функции
- создать хранимые процедуры
- создать статические данные (данные таблиц поиска)
- создать тестовые данные
запуск по одному в том же порядке, я всегда могу воссоздать свою БД с тестовыми данными. И когда мне нужно развернуть свою БД, я просто запускаю скрипты из 1-5 и оставляю 6 из него. Вы также можете автоматизировать это, создав bat
файл, который вызывает sqlcmd
команды. Пакетные файлы можно легко запускать из Visual Studio.
Если вы говорите о своем сервере, то вы можете восстановить свои системные базы данных текст ссылки
в противном случае самым простым способом было бы восстановить резервную копию, которую вы должны были взять в начале (ответ adathedev хороший).
сайт adathedev это ссылке не совсем сработало для меня, но это поставило меня на правильный путь.
вот что в конечном итоге работает для меня. Я должен был добавить SET QUOTED_IDENTIFIER ON
инструкция Перед удалением.
/*Disable Constraints & Triggers*/
exec sp_MSforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
exec sp_MSforeachtable 'ALTER TABLE ? DISABLE TRIGGER ALL'
/*Perform delete operation on all table for cleanup*/
exec sp_MSforeachtable 'SET QUOTED_IDENTIFIER ON; DELETE ?'
/*Enable Constraints & Triggers again*/
exec sp_MSforeachtable 'ALTER TABLE ? CHECK CONSTRAINT ALL'
exec sp_MSforeachtable 'ALTER TABLE ? ENABLE TRIGGER ALL'
/*Reset Identity on tables with identity column*/
exec sp_MSforeachtable 'IF OBJECTPROPERTY(OBJECT_ID(''?''), ''TableHasIdentity'') = 1 BEGIN DBCC CHECKIDENT (''?'',RESEED,0) END'