Форум: "Базы";
Текущий архив: 2002.03.21;
Скачать: [xml.tar.bz2];
ВнизINSERT в MS SQL7.0 Найти похожие ветки
← →
skiph (2002-02-12 09:03) [0]Есть таблица, скажем, c полями Field1 (varchar), Field2 (image) и ключевым автоинкриментным полем ID (на самом деле полей больше).
Так получается, что реальное значение поля Field1 я могу узнать только после создания записи в таблице, так как его значение косвенно зависит от значения поля ID. Т.е.:
1) Создаю запись в таблице, вставляя в Field1 NULL.
2) Расчитываю значение Field1.
3) Нахожу созданную запись
4) Update
То есть мне необходимо сразу после Insert узнать и запомнить значение ID. Как это сделать? SELECT использовать нельзя, поскольку при одновременной работе нескольких пользователей пустых Field1 может быть несколько, а отсылать для идентификации blob (значение Field2) считаю не рациональным.
← →
Леша (2002-02-12 09:22) [1]Ну в приципе функция @@INDENTITY возвращает последнее ID для текущей сессии.
← →
Roma (2002-02-12 13:17) [2]...
@@identity
PS: Просто очепятка, а человек будет искать...
PPS: Еще хорошо если будет... ;))) (nothing personal)
← →
xenon (2002-02-20 21:19) [3]Если расчеты не сложные, сделай триггер:
CREATE TRIGGER AI_таблица FOR таблица
ACTIVE
AFTER INSERT
BEGIN
Значение = ...
NEW.Field1 = Значение
END
← →
Praco (2002-02-21 09:33) [4]> Леша
@@identity - не функция, а глобальная переменная. Она хранит последнее id не текущей сессии, а всего сервера. Нет гарантии, что между вставкой записи и чтением @@identity не произошла вставка где-то еще.
> xenon ©
В MS SQL все триггера AFTER INSERT, но при множественной вставке будет вызван триггер один раз. Можно обработать в нем таблицу inserted.
> skiph ©
Не используй identity (ИМХО). Используй GUID. Сам его создавай и вставляй.
← →
amamed_3071 (2002-02-21 11:09) [5]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
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.03.21;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.006 c