Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Удаление в триггере записей ForeignKey  [new]
Tualan
Member

Откуда:
Сообщений: 53
Можно ли удалить в триггере запись из другой таблицы, которая имеет внешний ключ на таблицу, в которой выполняем удаление.

Пример:
create t1
(
nnId int references t2(nnID) on delete cascade on update cascade,
nnExtId int referencees t2(nnID),
)

create t2
(
nnId int
)
Выполняем удаление из t2, все записи из таблицы t1 связанные с t2 по nnExtId тоже удалялись.
2 ноя 05, 11:48    [2030186]     Ответить | Цитировать Сообщить модератору
 Re: Удаление в триггере записей ForeignKey  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Зачем Вам триггер, если Вы при определении связи и так указываете, что при удалении\изменении записи из таблицы t2 соответсвующие записи в таблице t1 будут удалены\изменены значения поля связи?!
2 ноя 05, 11:51    [2030204]     Ответить | Цитировать Сообщить модератору
 Re: Удаление в триггере записей ForeignKey  [new]
Glory
Member

Откуда:
Сообщений: 104760
Tualan

Выполняем удаление из t2, все записи из таблицы t1 связанные с t2 по nnExtId тоже удалялись.


Triggers and Cascading Referential Actions
Cascading referential actions fire the AFTER triggers in this sequence:

1. All of the cascading referential actions directly caused by the original DELETE or UPDATE are performed first.

2. When the original cascading referential actions have completed, the AFTER triggers on the original table are fired, regardless of whether any rows were updated.

3. AFTER triggers on tables in the chain of cascaded referential actions are then fired, but only if one or more rows in the table have been updated or deleted.
2 ноя 05, 12:02    [2030287]     Ответить | Цитировать Сообщить модератору
 Re: Удаление в триггере записей ForeignKey  [new]
Tualan
Member

Откуда:
Сообщений: 53
Запись из таблицы t1 принадлежит не одной, а двум записям из t2. По первому полю идет автоматическая привязка на удаление и изменение, мне надо, тчобы была привязка и по вторму полю. Если во втором поле написать
create t1
(
nnId int references t2(nnID) on delete cascade on update cascade,
nnExtId int referencees t2(nnID) on delete cascade on update cascade,
)

то сиквел ругается на рекурсивную зависимость. При написании в триггере удаления по полю nnExtId он ругается на внешний ключ. Видимо проверка целостности выполняется до срабатывания триггера.
2 ноя 05, 14:06    [2031068]     Ответить | Цитировать Сообщить модератору
 Re: Удаление в триггере записей ForeignKey  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
автор
Видимо проверка целостности выполняется до срабатывания триггера.


Совершенно верно.
2 ноя 05, 14:11    [2031091]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить