powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как организовать какскадное удаление в Microsoft SQL Server 7.0
7 сообщений из 7, страница 1 из 1
Как организовать какскадное удаление в Microsoft SQL Server 7.0
    #32000865
Надо чтобы при удалении записи удалялись все записи из связанных таблиц.
А у меня при попытке удаления генерируется исключительная ситуация.
...
Рейтинг: 0 / 0
Как организовать какскадное удаление в Microsoft SQL Server 7.0
    #32000866
baxxtor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
тригер напиши или сохраненную процедуру с транзакцией.

удачи!
...
Рейтинг: 0 / 0
Как организовать какскадное удаление в Microsoft SQL Server 7.0
    #32000876
Fompro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только SP (триггеры в 7.0 ещё работают как AFTER).
...
Рейтинг: 0 / 0
Как организовать какскадное удаление в Microsoft SQL Server 7.0
    #32000884
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Допустим есть таблица 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 не совсем прав, не надо делать таких безапеляционных заявлений, можно это дело посадить на триггеры.

С приветом Сергей
...
Рейтинг: 0 / 0
Как организовать какскадное удаление в Microsoft SQL Server 7.0
    #32000943
Mikhail Fidler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
переходите на SQL2000
Там это все уже встоенно
...
Рейтинг: 0 / 0
Как организовать какскадное удаление в Microsoft SQL Server 7.0
    #32000960
Павел
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да и в 2K триггеров "до" нету. Есть "вместо". Кто юзал парочку "до" и "после" меня поймет. Ими все рещается гораздо красивей.
...
Рейтинг: 0 / 0
Как организовать какскадное удаление в Microsoft SQL Server 7.0
    #32000972
Fompro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Serg Super. Конечно, всё это писалось в предположении о существовании ссылочной целостности. Конечно, можно обойтись одними триггерами. Можно работать только с клиента или с Middle-tier. Что касается каскадного удаления, то у меня, например под "пустым" счётом (проводок не было) висят дополнительные атрибуты (приходится реализовывать один-ко-многим), кросс-таблица счетов и получателей и т.д. Так что от не хотелось бы отказываться от каскадного удаления (тем более, что с 7.0 появилась возможность отключать триггер ... А ведь приходится)
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как организовать какскадное удаление в Microsoft SQL Server 7.0
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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