@Senture

Как установить для всех связей в БД каскадное удаление?

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

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

Подскажите пожалуйста как это можно сделать?
Использую mssql server и ms sql management studio

P.S. Всем спасибо!
  • Вопрос задан
  • 714 просмотров
Решения вопроса 1
tsklab
@tsklab Куратор тега SQL Server
Здесь отвечаю на вопросы.
Не все каскадные удаления разрешены.

Если каскадные удаления не были определены во время проектирования, придётся определять спецификацию обновления и удаления каждой связи, которая мешает удалению.

Кроме удаления по связи может быть обнуление (NULL) или установка значения по-умолчанию. Это может быть необходимо по физической модели.

Удаление "грязных" данных лучше не делать автоматически, так как могут пострадать "чистые". Можно удалять строки в таблицах по связям (JOIN) отдельно.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
unfilled
@unfilled
Не уверен, что это будет самым простым способом, но чтобы это сделать - вам нужно заскриптовать все внешние ключи в текущем состоянии, потом сделать что-то вроде такого (не работает с композитными ключами), удалить ваши данные и восстановить внешние ключи по сохранённым скриптам.
Учтите, что при пересоздании внешних ключей, SQL Server будет сканировать таблицы/индексы (при наличии) по этим ключам, чтобы убедиться, что в них нет некорректных данных. Этого можно избежать с помощью NOCHECK, но тогда ключи не будут trusted.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы