|
|
|
Каскадное удаление и RI
|
|||
|---|---|---|---|
|
#18+
В базе MS SQL7 я связал ряд таблиц через RI (PK->FK). Теперь возникла задача при удалении записи из одной таблицы организовать каскадное удаление записей из подчиненных таблиц. Первое желание - это записать этот код в триггер на удаление. Но ведь триггер - это то, что выполняется в самую последнюю очередь, т.е. до его выполнения дело просто не дойдет. Ошибка вылетит на этапе проверки RI. Так вот, организовать каскадное удаление в этом случае можно только через хранимые процедуры или все-таки можно в отдельных случаях (не во всех) заставить выполнить триггер ДО проверки RI ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2002, 06:41:06 |
|
||
|
Каскадное удаление и RI
|
|||
|---|---|---|---|
|
#18+
>или все-таки можно в отдельных случаях (не во всех) заставить выполнить триггер ДО проверки RI Нельзя, пользуйтесь процедурами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2002, 08:57:35 |
|
||
|
Каскадное удаление и RI
|
|||
|---|---|---|---|
|
#18+
Может быть, я чего-то не понял, но почему не включить автоматическое каскадное удаление в FK? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2002, 09:58:26 |
|
||
|
Каскадное удаление и RI
|
|||
|---|---|---|---|
|
#18+
> включить автоматическое каскадное удаление в FK Это как? Можно поподробнее. Речь идет о MS SQL7.0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2002, 10:02:34 |
|
||
|
Каскадное удаление и RI
|
|||
|---|---|---|---|
|
#18+
Удалить FK, потом примерно так: alter table ttt1 add constraint qqq foreign key (col1, ...) references ttt2 (col1, ...) on delete cascade В help'е можно подробнее посмотреть. Правда, работаю на 2000 и не знаю, есть ли это в семерке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2002, 10:25:56 |
|
||
|
Каскадное удаление и RI
|
|||
|---|---|---|---|
|
#18+
В 7 этого еще нет По крайней мере в описании команды Alter Table слово Cascade вообще не упоминается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2002, 10:44:49 |
|
||
|
Каскадное удаление и RI
|
|||
|---|---|---|---|
|
#18+
Ну, тогда только процедурой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2002, 11:01:04 |
|
||
|
Каскадное удаление и RI
|
|||
|---|---|---|---|
|
#18+
>Ну, тогда только процедурой. Можно и триггерами, но тогда и RI придется реализовывать триггерами, тоже вариант, но на мой взгляд плохой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2002, 12:22:57 |
|
||
|
Каскадное удаление и RI
|
|||
|---|---|---|---|
|
#18+
Просто снимите флажок Enable relationship on insert/update. Правда, в этом случае придется проверять целостность (соответствие значений в дочерней таблице), т.е. писать триггер на инсерт/апдэйт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2002, 12:41:02 |
|
||
|
Каскадное удаление и RI
|
|||
|---|---|---|---|
|
#18+
Kirk wrote: Просто снимите флажок Enable relationship on insert/update. Правда, в этом случае придется проверять целостность (соответствие значений в дочерней таблице), т.е. писать триггер... ИМХО лучше уж на 2000 перейти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2002, 17:38:32 |
|
||
|
Каскадное удаление и RI
|
|||
|---|---|---|---|
|
#18+
лучше уж на 2000 перейти В обозримом будущем (2...3 года) это не реально. Такая уж у нас контора :( Так что пока пишу ХП. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2002, 20:06:26 |
|
||
|
Каскадное удаление и RI
|
|||
|---|---|---|---|
|
#18+
В свое время я для семерки писал такие хранимые процедуры для каскадного удаления записей. В основе лежал принцип того, что всегда по FOREIGN KEYs можно вычислить таблицы, которые ссылаются на записи в текущей таблице. Затем для каждой child таблицы тем же скриптом автоматически создается аналогичная процедура. И в момент вызова процедуры удаления с главной таблицы, вызывается вначале процедура для первого уровня child таблиц, затем те процедуры проводят то же самое действие над своими child таблицами, и так до тех пор, пока не найдется самый leaf уровень, а потом уже происходит удаление из головных таблиц. Я как нибудь найду скрипт, генерирующий подобные процедуры и закину сюда. -- Слон ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2002, 23:53:01 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32045834&tid=1820863]: |
0ms |
get settings: |
5ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
51ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 199ms |
| total: | 311ms |

| 0 / 0 |
