![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ADOCommand [D7, WinXP]
Леонид © (2007-12-05 19:25:00)Не подскажите как можно после INSERT-а узнать ID добавленной строки?
sql = 'INSERT INTO tb (`id`,`value`) VALUES (null,'value')';
ADOCommand1.CommandText := sql;
ADOCommand1.Execute;
Palladin (2007-12-06 15:15:00) [1]Просто у некоторых голубых инет появился :)
Anatoly Podgoretsky (2007-12-06 15:00:00) [2]> KSergey (06.12.2007 14:31:17) [17]
Сам ты голубой :-)
KSergey (2007-12-06 14:31:00) [3]> Anatoly Podgoretsky © (06.12.07 13:36) [16]
> Автор не хочет разглашать базу, а вы тут копья ломаете.
А это прикольно.
Вообще, голубые, простите, занятно активизировались :)
Anatoly Podgoretsky (2007-12-06 13:36:00) [4]Автор не хочет разглашать базу, а вы тут копья ломаете.
oxffff (2007-12-06 12:25:00) [5]
> Johnmen © (06.12.07 09:19) [13]
> Palladin © (06.12.07 09:31) [14]
А как насчет триггера?
Для MSSQL анализ inserted таблицы.
Palladin (2007-12-06 09:31:00) [6]
> oxffff © (06.12.07 08:41) [12]
речь не об @@Identity, если что, с ним то все понятно, а об использовании max внутри транзакции...
Johnmen (2007-12-06 09:19:00) [7]
> oxffff © (06.12.07 08:41) [12]
А как же [4]?
oxffff (2007-12-06 08:41:00) [8]RTFM
@@IDENTITY and SCOPE_IDENTITY return the last identity value generated in any table in the current session.
However, SCOPE_IDENTITYreturns the value only within the current scope; @@IDENTITY is not limited to a specific scope.
Palladin (2007-12-05 22:10:00) [9]
> Johnmen © (05.12.07 21:34) [10]
зависимо, натыкался :)
Johnmen (2007-12-05 21:34:00) [10]
> Palladin © (05.12.07 21:20) [8]
> max вполне можно использовать
> если оформить это в единой транзакции
Не зависимо от уровня её изоляции? :)
Desdechado (2007-12-05 21:33:00) [11]> max вполне можно использовать если оформить это в единой
> транзакции
Что-то подозрительно это, хоть и не знаю MS, но по идее автоинкремент работает в контексте базы, а не транзакции, иначе бы другие юзеры не могли добавлять до окончания твоей транзакции.
Palladin (2007-12-05 21:20:00) [12]
> palva © (05.12.07 21:18) [6]
max вполне можно использовать если оформить это в единой транзакции
Palladin (2007-12-05 21:19:00) [13]
> Desdechado © (05.12.07 21:04) [4]
ну не только MSSQL, это вообще как бы стандарт TSQL
palva (2007-12-05 21:18:00) [14]> Если поле автоинкрементное, то select max?
Если, конечно, другой пользователь не успел между вашим созданием и запросом создать еще несколько своих записей.
Юрий Зотов (2007-12-05 21:13:00) [15]Если поле автоинкрементное, то select max?
Desdechado (2007-12-05 21:04:00) [16]> select @@Identity
Это для MSSQL.
У авторя неясно что.
В общем случае решается только, если в таблице есть уникальный ключ, не содержащий поле инкремента. Тогда по нему можно перезапросить вставленное и узнать ID.
Palladin (2007-12-05 19:31:00) [17]select @@Identity
Леонид (2007-12-05 19:28:00) [18]ID - автоинкрементное поле, запрос эквивалент sql = 'INSERT INTO tb (`value`) VALUES ('value')';
null - для наглядности
Palladin (2007-12-05 19:27:00) [19]так ведь сам же вставил
ID=Null