Re[3]: Проблемы с триггером каскадного удаления
От: Sshur Россия http://shurygin-sergey.livejournal.com
Дата: 12.12.11 13:55
Оценка: 3 (1)
Здравствуйте, spy__, Вы писали:


S>>Ну дык триггер то istead of. Данные, которые в deleted из таблицы не удаляются. Делайте триггер after или удаляйте руками.


__>1. for/after я уже пробовал. При выполнении запроса на удаление:

__>

Сообщение 547, уровень 16, состояние 0, строка 1
__>Конфликт инструкции DELETE с ограничением SAME TABLE REFERENCE "FK_TABLE4_2". Конфликт произошел в базе данных "TEST1", таблица "dbo.Table4", column 'x'.
__>Выполнение данной инструкции было прервано.

__>Это подкидывает свинью наличие FK.


Ну да. Вообще имхо плохая идея делать такое каскадное удаление через триггер. Надо сначала удалить все записи, на которые есть FK, а потом PK


__>2. "Удаляйте руками". Можно конкретный пример? Т.к. у меня само создание триггера ругается на то, что не удается обновить deleted и inserted (это когда пробую выполнить больше одного запроса в триггере).


Как-то так




create trigger casc_table4_1 on Table4 instead of delete as
begin
delete from Table4 WHERE x in (select id from deleted)

delete from Table4 WHERE id in (select id from deleted)
end;


У меня пример прошел успешно
Шурыгин Сергей

"Не следует преумножать сущности сверх необходимости" (с) Оккам
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.