Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

insert into () select from


jack128 ©   (2006-03-20 00:30:00) 

День добрый.
Есть следующие таблицы
periods(id, caption, start_date) //id герится в тригере,  start_date тоже.
generalization_folders - это обычное дерево (id, caption, parent_id) соответственно parent_id и id связаны FK
generalizations - листья этого дерева. (id, caption, parent_id <- ссылка на folders.id, тоже связана по FK)
Есть такой запрос

insert into periods
 (caption)
select caption from generalizations g

Пытаюсь выполнить в IBExpert - на выходе получаю

Invalid insert or update value(s): object columns are
constrained - no 2 table rows can have duplicate column values.
violation of PRIMARY or UNIQUE KEY constraint "PK_GENERALIZATION_FOLDERS" on table "GENERALIZATION_FOLDERS".

Есть один тонкий момент. ID для всех таблиц берутся из одного генератоора, но в определенный момент я кое чего намудрил и получилось, что gen_general < max(id) from generelization_folders/generalizations. По при этом gen_general > max(id) from periods. то есть при вставки в таблицу periods - проблем быть не должно. Однако проблемы есть. Но когда я выставил генератору нормальное значение (max(generalization_id, generlization_folder_idб period_id))  ошибка исчезла.

Собственно вопрос: что это было??  И почему?? И как PK абсолютно левой таблицы влияет на выполнимость данного запроса??


Johnmen   (2006-03-20 10:46:00) [1]

>jack128 ©   (20.03.06 10:40) [5]

Обычно так и бывает...:)


Johnmen   (2006-03-20 10:42:00) [2]

Какие ключи/индексы на periods?


jack128   (2006-03-20 10:40:00) [3]

А!!!  Блин, как всегда.. Там есть еще один трегерок, который вставляет запись как раз в GENERALIZATION_FOLDERS. Ступил. Всем спасибо, вопрос закрыт.


jack128   (2006-03-20 10:39:00) [4]

стандартный тригер..
CREATE TRIGGER PERIODS_BI FOR PERIODS
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
 IF (NEW.ID IS NULL) THEN
   NEW.ID = GEN_ID(GEN_GENERAL,1);
END


Johnmen   (2006-03-20 10:27:00) [5]

А что в триггере periods'а?


jack128   (2006-03-20 10:12:00) [6]

Reindeer Moss Eater ©   (20.03.06 0:51) [1]
не-а. Тоже самое


Reindeer Moss Eater   (2006-03-20 00:51:00) [7]

А так:
select g.caption from generalizations g

?


Наверх

Титульная страница Поиск, карта сайта Написать письмо