Как сбросить базу данных 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 скрипты:

  1. Drop DB
  2. создать модель
  3. создать функции
  4. создать хранимые процедуры
  5. создать статические данные (данные таблиц поиска)
  6. создать тестовые данные

запуск по одному в том же порядке, я всегда могу воссоздать свою БД с тестовыми данными. И когда мне нужно развернуть свою БД, я просто запускаю скрипты из 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'