SQL рецепты: удаление всех записей из таблиц

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


exec sp_msforeachtable N'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
exec sp_msforeachtable N'ALTER TABLE ? DISABLE TRIGGER ALL'
exec sp_msforeachtable N'DELETE FROM ?'
exec sp_msforeachtable N'ALTER TABLE ? ENABLE TRIGGER ALL'
exec sp_msforeachtable N'ALTER TABLE ? CHECK CONSTRAINT ALL'

Этот код последовательно отключает проверку внешних ключей, все триггеры, затем удаляет все записи из таблиц, затем включает триггеры и проверку ключей обратно.
Обращаю внимание, что delete работает очень медленно и пишет в логи, гораздо быстрее работает truncate. Но truncate будет работать только если удалить все ключи (и те, которые ссылаются, и те, на которые ссылается таблица). Это легко делается через интерфейс SQL Management Studio, но восстанавливается, увы, не так быстро и только руками. В общем, выбирайте сами.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *