-
Недостаточное или неполные сведения о ключевом поле. Обновление влияет на слишком большое число строк.
Вот это сообщение мне пишит когда я хочу удалить детей при удалении родителя. Ругается тока тогда когда детей больше одного.
Удаляю я с помощью триггера на событие delete уродителя CREATE TRIGGER trg_SotrDelete ON dbo.sotr
AFTER DELETE AS
declare @id int Select @id = id_sotr from deleted
if (select count(*) from dok where dok.id_s_dok = @id)>0 begin DELETE FROM dok WHERE dok.id_s_dok = @id end
if (select count(*) from otpusk where otpusk.id_s_otpusk = @id)>0 begin DELETE FROM otpusk WHERE otpusk.id_s_otpusk = @id end
Не подскажете как с этим бороться
-
Зачем вообще вся это смешная байда, если есть обычное поддержание ссылочной целостности с каскадными воздействиями???
-
> Зачем вообще вся это смешная байда +1
> Не подскажете как с этим бороться убрать все, и сделать нормально.
по вопросу. в коде не восстанавливается @@identity, а по нему потом дельфи(ado? неважно) определяет на сколько записей произошло воздействие... естественно при ожидаемом 1-м удалении получив что удалилось десяток (пусть это не так, но видимость этого есть) возбуждается исключение.
-
> не восстанавливается @@identity блин, думаю одно пишу другое, надо - @@rowcount
-
> Зачем вообще вся это смешная байда, если есть обычное поддержание > ссылочной целостности с каскадными воздействиями???
Прошу подсказать как это сделать. Спасибо за ответы
-
Если при создании диограммы это надо делать то у меня получилось. Спасибо
-
не обязательно (я вообще не часто например диаграммы делаю... раз или два за все время), можно еще в "десигне" таблици, правой кнопкой на поле, выбрать "релатионсшипс". впрочем. из диаграмм та же форма настроек вызывается.
-
> Select @id = id_sotr from deleted
Довольно распространенная ошибка, живущая даже в родных книжках от МС.
deleted - это набор данных. Следовательно, код триггера будет неработоспособен, если пытаться удалить несколько записей одним delete.
А ошибку тебе АДО вертает. Выходы : 1) каскадный внешний ключ (тут внешний ключ и без каскада не помешает), тогда триггер просто выкинуть. 2) удалять напрямую через SQL, а не методом delete. Тогда триггер мона оставить. Но его все равно придется переписывать, т.к. кривой.
ИМХА - я за первый способ.
|