2009-08-18 3 views
2

У меня есть база данных с сотнями таблиц.Очистка базы данных

Я создаю скрипт для удаления всех строк в этой базе данных.

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

Есть ли что-то, что я могу использовать для этого или мне нужно сделать это с трудом?

EDIT

Принято Ответ был изменен, чтобы включить Disable Trigger, а

EXEC sp_MSForEachTable 'DISABLE TRIGGER ALL ON ? ' 
EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL' 
EXEC sp_MSForEachTable 'DELETE FROM ?' 
EXEC sp_MSForEachTable 'ALTER TABLE ? CHECK CONSTRAINT ALL' 
EXEC sp_MSForEachTable 'ENABLE TRIGGER ALL ON ? ' 
+4

Как насчет "DROP DATABASE"? –

+0

Я хочу структуру .. просто не данные. Я действительно не хочу бросать все это. –

ответ

7

Вы можете отключить все ограничения, а затем удалить все данные, а также включить ограничения снова , Вы можете поместить код в хранимую процедуру для повторного использования. Что-то быстро и грязно:

CREATE PROCEDURE sp_EmplyAllTable 
AS 
EXEC sp_MSForEachTable ‘ALTER TABLE ? NOCHECK CONSTRAINT ALL’ 
EXEC sp_MSForEachTable ‘DELETE FROM ?’ 
EXEC sp_MSForEachTable ‘ALTER TABLE ? CHECK CONSTRAINT ALL’ 
GO 
+1

вот путь - ты добрался прямо до меня! –

+1

И .. в зависимости от базы данных, возможно, мы могли бы отключить/включить все триггеры, используя тот же синтаксис. – Jonathan

4

Я предполагаю, что вы хотите структуру без каких-либо данных?

Можете ли вы создавать сценарии/функции/пользовательские функции/триггеры/разрешения и т. Д., А затем удалять базу данных, прежде чем воссоздать ее со сценарием?

Эта ссылка объясняет, как создать сценарий для всех объектов в базе данных с помощью студии управления сервера SQL ... http://msdn.microsoft.com/en-us/library/ms178078.aspx

+0

Сценарии БД и отбрасывания/воссоздания, безусловно, самый простой и быстрый способ пойти – Anthony

+0

На самом деле, это сложнее, чем другие подходы. Во-первых, у вас есть поиск самих объектов сценария. во-вторых, вам нужно поддерживать свой репозиторий сценариев, ролей и разрешений. общий скрипт для циклического использования объектов таблицы и удаления данных намного проще. –

+0

Согласовано. Метаданные сценариев - неприятный бизнес. Легче просто удалить данные. – Anon246

2

Если бы это было MySQL, я хотел бы использовать «mysqldump --no-data», чтобы сделать резервную копию только метаданных базы данных. Затем я полностью удаляю базу данных и восстанавливаю резервную копию без данных.

Помимо трехэтапного процесса, это намного быстрее, чем транзакции и ввод-вывод, чем удаление из каждой таблицы в отдельности. А также сокращает табличное пространство на диске, удаление которого не будет выполняться (для InnoDB, то есть).

Я не знаком с инструментами резервного копирования Microsoft SQL Server, есть ли эквивалентная опция?


Я думаю, что я нашел что-то многообещающее: How to: Generate a Script (SQL Server Management Studio)

Чтобы сгенерировать скрипт целой базы данных

  1. В обозревателе объектов подключитесь к экземпляру SQL Server База данных Двигатель, а затем разверните этот экземпляр.
  2. Развернуть Базы данных, щелкните правой кнопкой мыши любую базу данных, выберите пункт Задачи , указывают на Генерация сценариев, а затем следуйте шаги в создания сценариев Мастер.
+0

Эта функция является видом боли при наличии зависимостей при заказе. Вам нужно будет сначала записать все FK, а затем записать все остальные после изменения параметров сценариев. Это одна из причин того, что SQL Compare и другие третьи стороны настолько популярны. Они обрабатывают сложность метаданных для вас, когда SSMS и SSIS не – Anon246

Смежные вопросы