-
На самом деле метод удаления данных в базе данных не сложен. Зачем мне с ним беспокоиться? Во-первых, я предлагаю здесь удалить все данные в базе данных. попасть в бесконечный цикл. На самом деле метод удаления данных в базе данных не сложен. Зачем мне с ним беспокоиться? Во-первых, я предлагаю здесь удалить все данные в базе данных. Поскольку данные могут образовывать взаимные ограничения, операция удаления. может попасть в бесконечный цикл. Во-вторых, здесь используется неофициальная хранимая процедура Microsoft sp_MSForEachTable.
Возможно, многие читатели и друзья сталкивались с такой ситуацией: хотят очистить пустую базу данных на основе базы разработки, но из-за отсутствия общего понимания структуры базы данных при удалении записей в таблице они не могут их удалить. поскольку могут существовать ограничения внешнего ключа. Общая структура базы данных представляет собой основную таблицу и подтаблицу. В этом случае обычно необходимо сначала удалить записи подтаблицы, а затем удалить записи основной таблицы.
Когда дело доходит до удаления записей данных, на ум часто приходят операторы delete и truncate. Однако, если между двумя или более таблицами существуют ограничения, эти два оператора могут дать сбой, и самое ужасное, что этими двумя командами можно только управлять. один стол за раз. Итак, что же делать, если вы действительно хотите удалить все записи в базе данных SQL Server? Есть два варианта:
1. Удалить по одному по порядку. Этот метод очень нереален, когда таблиц много. Даже если таблиц не много, но ограничений много, все равно придется потратить много времени и сил на изучение ограничения. Затем выясните, какую таблицу удалить первой, какую таблицу удалить следующей и какую таблицу удалить последней.
2. Отключите все ограничения, удалите все данные и, наконец, включите ограничения. Таким образом, вам не придется тратить время и силы на изучение ограничений. Вам нужно всего лишь написать простую хранимую процедуру для автоматического выполнения этой задачи.
Из этих двух вариантов нетрудно увидеть, что второй вариант является самым простым и эффективным. Так как же при использовании второго варианта его реализовать?
Во-первых, вам нужно написать код для перебора всех таблиц. Здесь я рекомендую хранимую процедуру sp_MSForEachTable, поскольку в официальной документации Microsoft нет описания этой хранимой процедуры, и многие разработчики, возможно, не слышали о ней, поэтому вы можете поискать по ней. в Интернете Большинство решений очень сложны. Давайте посмотрим на полный скрипт:
СОЗДАТЬ ПРОЦЕДУРУ sp_DeleteAllData
КАК
EXEC sp_MSForEachTable 'ИЗМЕНИТЬ ТАБЛИЦУ? NOCHECK CONSTRAINT ALL'
EXEC sp_MSForEachTable 'ИЗМЕНИТЬ ТАБЛИЦУ? ОТКЛЮЧИТЬ ВСЕ'
EXEC sp_MSForEachTable 'УДАЛИТЬ ИЗ?'
EXEC sp_MSForEachTable 'ИЗМЕНИТЬ ТАБЛИЦУ? ПРОВЕРИТЬ ОГРАНИЧЕНИЯ ВСЕ'
EXEC sp_MSForEachTable 'ИЗМЕНИТЬ ТАБЛИЦУ? ВКЛЮЧИТЬ ТРИГГЕР ВСЕ'
EXEC sp_MSFOREACHTABLE 'ВЫБРАТЬ * ИЗ?'
ИДТИ
Этот сценарий создает хранимую процедуру с именем sp_DeleteAllData. Первые два оператора отключают ограничения и триггеры соответственно. Третий оператор фактически удаляет все данные. Последний оператор отображает записи в каждой таблице. это утверждение можно опустить. Я просто хочу убедиться, что все таблицы очищены.
Вы можете запустить эту хранимую процедуру в любой базе данных, конечно, не в сгенерированной базе данных, но не вините меня в том, что я вам не сказал! В любом случае сначала создайте резервную копию базы данных, используйте резервную базу данных для восстановления, а затем запустите хранимую процедуру! Ха-ха, даже если это большая база данных, ваша база данных вскоре станет пустой, что немного пугает!