Временное включение ON DELETE CASCADE - PullRequest
3 голосов
/ 16 февраля 2009

Я использую SQL Server 2005.

Наше приложение почти никогда не удаляется, если оно не является логическим удалением, и поэтому нам не нужно каскадное удаление.

На самом деле, довольно приятно знать, что ограничения внешнего ключа дают нам некоторую защиту от случайного оператора удаления.

Однако очень редко мне нужно удалять таблицу верхнего уровня и все ее дочерние элементы. На данный момент я делаю это с несколькими операторами DELETE в порядке записи, и это становится очень большим, сложным и невозможным поддерживать в актуальном состоянии сценарий.

Мне интересно, есть ли способ автоматического включения каскадного удаления для всех внешних ключей в базе данных, выполнения удаления на высшем уровне и последующего их повторного включения?

Ответы [ 3 ]

2 голосов
/ 16 февраля 2009

Как насчет написания пары сценариев - один, который вы запускаете вручную, когда собираетесь удалить записи, который включает каскад при удалении соответствующим образом для ограничений, а затем другой, который вы запускаете после завершения удаления, чтобы отключить их и вернуть вещи в нормальное русло?

1 голос
/ 16 февраля 2009

Просто мысль: используйте INSTEAD OF TRIGGER для родительской таблицы для удаления, чтобы вся логика дочерней записи-удаления находилась в одном месте

0 голосов
/ 16 февраля 2009

Для другого вопроса здесь, Я написал скрипт , который должен автоматически сгенерировать удаление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...