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

Откуда: Санкт-Петербург
Сообщений: 18
Доброго времени всем! Подскажите, пожалуйста, каким образом проще всего удалить запись из главной и всех связанных с ней таблиц, чтобы не ползать по очереди по всем таблицам. Кол-во записей в таблицах различное, но один FK. Кол-во связанных таблиц заранее не известно.Это зависит от того, насколько старательно трудились пользователи в разных отделах.
19 июн 12, 11:12    [12736546]     Ответить | Цитировать Сообщить модератору
 Re: Удаление записей в связанных таблицах  [new]
Megabyte
Member

Откуда: ближайшее заМКАДье
Сообщений: 4997
lavvas
1) Доброго времени всем! Подскажите, пожалуйста, каким образом проще всего удалить запись из главной и всех связанных с ней таблиц, чтобы не ползать по очереди по всем таблицам. Кол-во записей в таблицах различное, но один FK.
2) Кол-во связанных таблиц заранее не известно.Это зависит от того, насколько старательно трудились пользователи в разных отделах.

1) Установить опцию FK-ключа - каскадное удаление данных.
ON DELETE CASCADE

2) Это как? Динамически таблицы чтоли создаются?
19 июн 12, 12:35    [12737363]     Ответить | Цитировать Сообщить модератору
 Re: Удаление записей в связанных таблицах  [new]
lavvas
Member

Откуда: Санкт-Петербург
Сообщений: 18
Megabyte,

Точнее, количество таблиц известно. Но в различных ситуациях связанные записи могут появиться в различном количестве таблиц. От 5 до 10.
19 июн 12, 13:40    [12738091]     Ответить | Цитировать Сообщить модератору
 Re: Удаление записей в связанных таблицах  [new]
Программист-Любитель
Member

Откуда:
Сообщений: 16839
Написать процедуру, поднимающуюся снизу от десятой (самой детальной) таблицы вверх до самой главной. Если записей еще нет, то она будет удалять 0 строк в этих таблицах. Каскадное удаление - штука рискованная. Предпочитаю явно удалять при наличии действительного на то решения. Гарантия, что случайно не грохнут данные, уже глубоко завязанные в системе.
19 июн 12, 13:46    [12738176]     Ответить | Цитировать Сообщить модератору
 Re: Удаление записей в связанных таблицах  [new]
Deff
Member

Откуда: Пермь
Сообщений: 18328
При каскадном удалении не срабатывает триггер на удаление.
19 июн 12, 14:00    [12738347]     Ответить | Цитировать Сообщить модератору
 Re: Удаление записей в связанных таблицах  [new]
lavvas
Member

Откуда: Санкт-Петербург
Сообщений: 18
Программист-Любитель,

Спасибо! Идею понял. Осталось разобраться с очередность, но это не самое сложное.
19 июн 12, 14:05    [12738424]     Ответить | Цитировать Сообщить модератору
 Re: Удаление записей в связанных таблицах  [new]
Glory
Member

Откуда:
Сообщений: 104751
Deff
При каскадном удалении не срабатывает триггер на удаление.

Чего это вдруг он не срабатывает ?
19 июн 12, 14:16    [12738559]     Ответить | Цитировать Сообщить модератору
 Re: Удаление записей в связанных таблицах  [new]
Deff
Member

Откуда: Пермь
Сообщений: 18328
Glory
Deff
При каскадном удалении не срабатывает триггер на удаление.

Чего это вдруг он не срабатывает ?
Те которые удаляются по каскадному ключу, там триггер не срабатывает.

Правда тестил давно. На 2000ой, или 2005ом. Решил что так задумано, и отказался от использования.
19 июн 12, 15:40    [12739481]     Ответить | Цитировать Сообщить модератору
 Re: Удаление записей в связанных таблицах  [new]
Glory
Member

Откуда:
Сообщений: 104751
Deff
Те которые удаляются по каскадному ключу, там триггер не срабатывает.

Правда тестил давно. На 2000ой, или 2005ом. Решил что так задумано, и отказался от использования.

BOL SQL2008R2

Triggers and Cascading Referential Actions
Cascading referential actions fire the AFTER UPDATE or AFTER DELETE triggers in the following manner:

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

If there are any AFTER triggers defined on the affected tables, these triggers fire after all cascading actions are performed. These triggers fire in opposite order of the cascading action. If there are multiple triggers on a single table, they fire in random order, unless there is a dedicated first or last trigger for the table.

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

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

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

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.
19 июн 12, 15:48    [12739581]     Ответить | Цитировать Сообщить модератору
 Re: Удаление записей в связанных таблицах  [new]
lavvas
Member

Откуда: Санкт-Петербург
Сообщений: 18
Программист-Любитель
Написать процедуру, поднимающуюся снизу от десятой (самой детальной) таблицы вверх до самой главной. Если записей еще нет, то она будет удалять 0 строк в этих таблицах. Каскадное удаление - штука рискованная. Предпочитаю явно удалять при наличии действительного на то решения. Гарантия, что случайно не грохнут данные, уже глубоко завязанные в системе.


И вот что еще я подумал в свете Вашего совета. На тестовой БД я найду подходящую по параметрам запись, попробую ее удалить штатными средствами системы и сделаю trace.
19 июн 12, 16:35    [12740011]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить