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

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

INSERT в MS SQL7.0 [D6, MSSQL]


skiph ©   (2002-02-12 09:03:00) 

Есть таблица, скажем, c полями Field1 (varchar), Field2 (image) и ключевым автоинкриментным полем ID (на самом деле полей больше).
Так получается, что реальное значение поля Field1 я могу узнать только после создания записи в таблице, так как его значение косвенно зависит от значения поля ID. Т.е.:
1) Создаю запись в таблице, вставляя в Field1 NULL.
2) Расчитываю значение Field1.
3) Нахожу созданную запись
4) Update
То есть мне необходимо сразу после Insert узнать и запомнить значение ID. Как это сделать? SELECT использовать нельзя, поскольку при одновременной работе нескольких пользователей пустых Field1 может быть несколько, а отсылать для идентификации blob (значение Field2) считаю не рациональным.


amamed_3071   (2002-02-21 11:09:00) [1]

Q.Sql.Clear;
Q.SQl.Append("INSERT INTO ACTIVE (Filed1,Field2) Values....");
Q.SQL.Append("select @@identity lastref");
q.active:=true;
l:=q.fieldbyname("lastref").asinteger


Praco   (2002-02-21 09:33:00) [2]

> Леша
@@identity - не функция, а глобальная переменная. Она хранит последнее id не текущей сессии, а всего сервера. Нет гарантии, что между вставкой записи и чтением @@identity не произошла вставка где-то еще.
> xenon ©
В MS SQL все триггера AFTER INSERT, но при множественной вставке будет вызван триггер один раз. Можно обработать в нем таблицу inserted.
> skiph ©
Не используй identity (ИМХО). Используй GUID. Сам его создавай и вставляй.


xenon   (2002-02-20 21:19:00) [3]

Если расчеты не сложные, сделай триггер:
CREATE TRIGGER AI_таблица FOR таблица
ACTIVE
AFTER INSERT
BEGIN
Значение = ...
NEW.Field1 = Значение
END


Roma   (2002-02-12 13:17:00) [4]

... @@identity

PS: Просто очепятка, а человек будет искать...
PPS: Еще хорошо если будет... ;))) (nothing personal)


Леша   (2002-02-12 09:22:00) [5]

Ну в приципе функция @@INDENTITY возвращает последнее ID для текущей сессии.


Наверх

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