Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2008.11.23;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.011 c
3-1210148975
tormoz
2008-05-07 12:29
2008.11.23
Запуск DTS на MS SQL SERVER 2005


15-1221834038
tesseract
2008-09-19 18:20
2008.11.23
Экономика


15-1222365108
Aki
2008-09-25 21:51
2008.11.23
Корректное отображение арабских символов


2-1223625754
asders
2008-10-10 12:02
2008.11.23
HotKey


1-1202298317
Виталий
2008-02-06 14:45
2008.11.23
ПРоблема с ТListView





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский