Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.11.23;
Скачать: CL | DM;

Вниз

MSSQL 2005   Найти похожие ветки 

 
AlexAl-77   (2008-05-08 19:17) [0]

Недостаточное или неполные сведения о ключевом поле. Обновление влияет на слишком большое число строк.

Вот это сообщение мне пишит когда я хочу удалить детей при удалении родителя. Ругается тока тогда когда детей больше одного.

Удаляю я с помощью триггера на событие 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

Не подскажете как с этим бороться


 
Johnmen ©   (2008-05-08 19:23) [1]

Зачем вообще вся это смешная байда, если есть обычное поддержание ссылочной целостности с каскадными воздействиями???


 
sniknik ©   (2008-05-08 20:31) [2]

> Зачем вообще вся это смешная байда
+1

> Не подскажете как с этим бороться
убрать все, и сделать нормально.

по вопросу.
в коде не восстанавливается @@identity, а по нему потом дельфи(ado? неважно) определяет на сколько записей произошло воздействие... естественно при ожидаемом 1-м удалении получив что удалилось десяток (пусть это не так, но видимость этого есть) возбуждается исключение.


 
sniknik ©   (2008-05-08 20:33) [3]

> не восстанавливается @@identity
блин, думаю одно пишу другое, надо - @@rowcount


 
AlexAl-77   (2008-05-11 12:06) [4]


> Зачем вообще вся это смешная байда, если есть обычное поддержание
> ссылочной целостности с каскадными воздействиями???

Прошу подсказать как это сделать. Спасибо за ответы


 
AlexAl-77   (2008-05-11 12:15) [5]

Если при создании диограммы это надо делать то у меня получилось. Спасибо


 
sniknik ©   (2008-05-11 12:38) [6]

не обязательно (я вообще не часто например диаграммы делаю... раз или два за все время), можно еще в "десигне" таблици, правой кнопкой на поле, выбрать "релатионсшипс". впрочем. из диаграмм та же форма настроек вызывается.


 
ANB   (2008-05-12 10:12) [7]


> Select @id = id_sotr from deleted

Довольно распространенная ошибка, живущая даже в родных книжках от МС.

deleted - это набор данных. Следовательно, код триггера будет неработоспособен, если пытаться удалить несколько записей одним delete.

А ошибку тебе АДО вертает.
Выходы :
1) каскадный внешний ключ (тут внешний ключ и без каскада не помешает), тогда триггер просто выкинуть.
2) удалять напрямую через SQL, а не методом delete. Тогда триггер мона оставить. Но его все равно придется переписывать, т.к. кривой.

ИМХА - я за первый способ.



Страницы: 1 вся ветка

Текущий архив: 2008.11.23;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.018 c
15-1222006281
@!!ex
2008-09-21 18:11
2008.11.23
Где взять StarCraft с полной озвучкой(русской или английской)


2-1223895983
jonin
2008-10-13 15:06
2008.11.23
PageControl1


15-1222320877
Кое кто
2008-09-25 09:34
2008.11.23
Google празднует своё десятилетие...


2-1223763095
aslanbek
2008-10-12 02:11
2008.11.23
Обработки ошибок.


15-1222175576
Кое кто
2008-09-23 17:12
2008.11.23
Хочу сыграть один против форума Delphimaster в шахматы...