powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Каскадное удаление и RI
13 сообщений из 13, страница 1 из 1
Каскадное удаление и RI
    #32030609
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В базе MS SQL7 я связал ряд таблиц через RI (PK->FK). Теперь возникла задача при удалении записи из одной таблицы организовать каскадное удаление записей из подчиненных таблиц. Первое желание - это записать этот код в триггер на удаление. Но ведь триггер - это то, что выполняется в самую последнюю очередь, т.е. до его выполнения дело просто не дойдет. Ошибка вылетит на этапе проверки RI.

Так вот, организовать каскадное удаление в этом случае можно только через хранимые процедуры или все-таки можно в отдельных случаях (не во всех) заставить выполнить триггер ДО проверки RI ?
...
Рейтинг: 0 / 0
Каскадное удаление и RI
    #32030621
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>или все-таки можно в отдельных случаях (не во всех) заставить выполнить триггер ДО проверки RI
Нельзя, пользуйтесь процедурами.
...
Рейтинг: 0 / 0
Каскадное удаление и RI
    #32030631
AlexP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может быть, я чего-то не понял, но почему не включить автоматическое каскадное удаление в FK?
...
Рейтинг: 0 / 0
Каскадное удаление и RI
    #32030632
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> включить автоматическое каскадное удаление в FK

Это как? Можно поподробнее. Речь идет о MS SQL7.0
...
Рейтинг: 0 / 0
Каскадное удаление и RI
    #32030635
Alex P
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Удалить FK, потом примерно так:

alter table ttt1 add constraint qqq foreign key (col1, ...) references ttt2 (col1, ...) on delete cascade

В help'е можно подробнее посмотреть.

Правда, работаю на 2000 и не знаю, есть ли это в семерке.
...
Рейтинг: 0 / 0
Каскадное удаление и RI
    #32030637
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В 7 этого еще нет По крайней мере в описании команды Alter Table слово Cascade вообще не упоминается.
...
Рейтинг: 0 / 0
Каскадное удаление и RI
    #32030639
AlexP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, тогда только процедурой.
...
Рейтинг: 0 / 0
Каскадное удаление и RI
    #32030645
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Ну, тогда только процедурой.
Можно и триггерами, но тогда и RI придется реализовывать триггерами, тоже вариант, но на мой взгляд плохой.
...
Рейтинг: 0 / 0
Каскадное удаление и RI
    #32030647
Kirk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Просто снимите флажок Enable relationship on insert/update. Правда, в этом случае придется проверять целостность (соответствие значений в дочерней таблице), т.е. писать триггер на инсерт/апдэйт.
...
Рейтинг: 0 / 0
Каскадное удаление и RI
    #32045630
Фотография ТиБиБи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kirk wrote:
Просто снимите флажок Enable relationship on insert/update. Правда, в этом случае придется проверять целостность (соответствие значений в дочерней таблице), т.е. писать триггер...

ИМХО лучше уж на 2000 перейти.
...
Рейтинг: 0 / 0
Каскадное удаление и RI
    #32045662
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
лучше уж на 2000 перейти

В обозримом будущем (2...3 года) это не реально. Такая уж у нас контора :( Так что пока пишу ХП.
...
Рейтинг: 0 / 0
Каскадное удаление и RI
    #32045675
Фотография Слон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В свое время я для семерки писал такие хранимые процедуры для каскадного удаления записей. В основе лежал принцип того, что всегда по FOREIGN KEYs можно вычислить таблицы, которые ссылаются на записи в текущей таблице. Затем для каждой child таблицы тем же скриптом автоматически создается аналогичная процедура. И в момент вызова процедуры удаления с главной таблицы, вызывается вначале процедура для первого уровня child таблиц, затем те процедуры проводят то же самое действие над своими child таблицами, и так до тех пор, пока не найдется самый leaf уровень, а потом уже происходит удаление из головных таблиц. Я как нибудь найду скрипт, генерирующий подобные процедуры и закину сюда.

-- Слон
...
Рейтинг: 0 / 0
Каскадное удаление и RI
    #32045834
Alexandr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По другому ни как не получиться. Когда у меня была 7ка, я снимал флажки со связей и удалял данные тригерами.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Каскадное удаление и RI
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]