Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
1-66867
mio
2002-03-05 17:33
2002.03.21
COM Experts


6-66942
Nikolay
2002-01-05 21:50
2002.03.21
TCP Client


3-66751
Igor_
2002-02-21 09:54
2002.03.21
Композитнычй отчет


1-66862
Kettle of delphi
2002-03-04 17:05
2002.03.21
Подскажите пожалуйста! Код TForm2.Create(nil) вовсе не помещает создаваемую форму на панель задач! (он ее помещает на РАБОЧИЙ СТОЛ)


4-67054
L_G
2002-01-24 11:59
2002.03.21
Как управлять чужим приложением?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский