Я пытаюсь удалить строку из таблицы в моей базе данных, но сначала мне нужно удалить строки, соответствующие этой строке с помощью внешних ключей.Как использовать вместо удаления триггера и все еще удалять строку в SQL Server
Я использую триггер instead of
на главном столе и внутри него, я сначала удаляю дочерние строки из других таблиц, соответствующих этой основной строке, а затем я хочу удалить основную строку. Но (как и ожидалось) основная строка не удаляется, потому что это триггер INSTEAD OF
.
Если я пытаюсь удалить основную строку в вместо триггера я получаю ошибку:
INSTEAD OF triggers do not support direct recursion. The trigger execution failed
Если я пытаюсь использовать AFTER DELETE
курок, я получаю сообщение об ошибке:
The DELETE statement conflicted with the REFERENCE constraint [...]
, потому что я Я пытаюсь удалить строку, которая соответствует другим строкам в других таблицах.
Я пытался придумать идею решить эту проблему, но я застрял, и я не мог найти рабочего решения в Интернете. У меня такое чувство, что я пропускаю что-то очевидное, но я не могу найти его.
Спасибо и позаботься, ребята!
Это то, что каскадные удаления могут решить (например, вы только удаление зависимостей)? Или вы делаете другие вещи с удаленными данными? – ZLK
@ZLK Спасибо за ответ! Я знал, что буду сталкиваться, когда услышу ответ. Это решение для меня, но если бы я хотел сделать что-то еще с данными перед удалением, это будет другая история. –
У вас также есть возможность изменить таблицу, чтобы не проверять ограничение. Например, «alter table X nocheck constraint myConstraintName», затем выполнение операции удаления/манипуляции данными (например, в триггере после удаления), затем верните ограничение на 'alter table X check constraint myConstraintName'. – ZLK