|
Как организовать какскадное удаление в Microsoft SQL Server 7.0
|
|||
---|---|---|---|
#18+
Надо чтобы при удалении записи удалялись все записи из связанных таблиц. А у меня при попытке удаления генерируется исключительная ситуация. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2000, 21:18 |
|
Как организовать какскадное удаление в Microsoft SQL Server 7.0
|
|||
---|---|---|---|
#18+
тригер напиши или сохраненную процедуру с транзакцией. удачи! ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2000, 22:34 |
|
Как организовать какскадное удаление в Microsoft SQL Server 7.0
|
|||
---|---|---|---|
#18+
Только SP (триггеры в 7.0 ещё работают как AFTER). ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2000, 19:35 |
|
Как организовать какскадное удаление в Microsoft SQL Server 7.0
|
|||
---|---|---|---|
#18+
Допустим есть таблица c первичным ключом: create table Acc(acc int, name varchar(30)) и таблица со вторичными ключами create table Provodki(acc_debit int, acc_credit, summa money) Т.е. есть к примеру таблица названий счетов и есть таблица проводок, где эти счета выступают как дебит и кредит. И допустим при удалении счета надо стереть и все проводки к нему. Тогда триггер на удаление будет выглядеть примерно так: create trigger d_Acc on Acc for delete AS begin delete Provodki from Provodki p, deleted d where p.acc_debit=d.acc delete Provodki from Provodki p, deleted d where p.acc_credit=d.acc end В общем - ничего сложного. Но уже эти поля нельзя связывать ключами (тогда не будет возможности удалить запить из-за всторенной ссылочной целостности) и придется заодно писать триггеры на апдейт, а также на вставку и апдейт для таблицы Provodki. С одной стороны казалось бы лишняя работа, с другой - в базе будет происходить только то что вы написали, да и к тому же триггеры на таблицы типа Provodki всё равно наверняка есть(или должны быть). В 4-м MS SQL не было автоматической ссылочной целостности по ключам, ключи просто заводились и всё. Но по ним зато в клиентской части можно было бы сгенерировать текст триггера, как с каскадным удалением, так и с запретом удаления. Когда в 6.0 появилась ссылочная целостность, то эту возможность убрали. С другой стороны в приведенном мною примере как раз каскадное удаление выглядит весьма глупо - если есть проводки по счету наверное надо бы запретить его удалять. И вот как-то мне пока оно(каскадное удаление) нигде еще и не понадобилось. А то что "триггеры в 7.0 ещё работают как AFTER" нам никак не мешает - мы владеем информацией о том что было удалено из псевдо таблицы deleted. Вообщем Fompro не совсем прав, не надо делать таких безапеляционных заявлений, можно это дело посадить на триггеры. С приветом Сергей ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2000, 07:36 |
|
Как организовать какскадное удаление в Microsoft SQL Server 7.0
|
|||
---|---|---|---|
#18+
переходите на SQL2000 Там это все уже встоенно ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2000, 10:10 |
|
Как организовать какскадное удаление в Microsoft SQL Server 7.0
|
|||
---|---|---|---|
#18+
Да и в 2K триггеров "до" нету. Есть "вместо". Кто юзал парочку "до" и "после" меня поймет. Ими все рещается гораздо красивей. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2000, 16:01 |
|
Как организовать какскадное удаление в Microsoft SQL Server 7.0
|
|||
---|---|---|---|
#18+
Serg Super. Конечно, всё это писалось в предположении о существовании ссылочной целостности. Конечно, можно обойтись одними триггерами. Можно работать только с клиента или с Middle-tier. Что касается каскадного удаления, то у меня, например под "пустым" счётом (проводок не было) висят дополнительные атрибуты (приходится реализовывать один-ко-многим), кросс-таблица счетов и получателей и т.д. Так что от не хотелось бы отказываться от каскадного удаления (тем более, что с 7.0 появилась возможность отключать триггер ... А ведь приходится) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2000, 19:42 |
|
|
start [/forum/topic.php?fid=46&fpage=3596&tid=1827575]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
25ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
others: | 260ms |
total: | 369ms |
0 / 0 |