#sql-server #sql-delete
Вопрос:
В MS SQL server существует ограничение внешнего ключа с каскадом удаления.
В целях обслуживания мы хотим удалить записи в таблице первичных ключей P без удаления записей в таблице внешних ключей F.
Итак, отключите внешний ключ следующим образом:
ALTER TABLE F NOCHECK CONSTRAINT constraint_name
Убедитесь, что внешний ключ отключен с помощью инструкции
select * from sys.foreign_keys where is_disabled=1 and name=constraint_name
Когда я бегу,
delete from P
, записи в F также удаляются, даже если ограничение внешнего ключа отключено. Я пробовал в Postgres и Oracle и не могу воспроизвести это поведение.
Как удалить записи без каскадного удаления?
Комментарии:
1. Возможно, кому-то следует пересмотреть прошлые решения, чтобы понять, почему вы реализовали каскадный FK, дублируя эту логику в триггере?
Ответ №1:
В дополнение к вышесказанному, мы также должны были выполнить:
ОТКЛЮЧИТЬ ТРИГГЕР ВСЕ НА F
Комментарии:
1. Если это не ответ на вопрос, пожалуйста, удалите его и отредактируйте в своем вопросе.