Каскадное удаление происходит даже после отключения внешних ключей

#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. Если это не ответ на вопрос, пожалуйста, удалите его и отредактируйте в своем вопросе.