|
![]() |
#1 |
Участник
|
Для автоинкрементных полей в MS SQL можно воспользоваться вызовом
X++: select @@identity Если для ADO, то это будет выглядеть примерно так X++: CCADOConnection con = new CCADOConnection(); CCADORecordSet rec; ; con.open('настройка для подключения'); rec = new CCADORecordset(); rec.open("set nocount on\n insert into tablex (name) values ('Name3')\n select @@identity as ident", con); if (rec.fields().count() > 0) { print rec.fields().itemIdx(0).value(); rec.close(); } con.close(); pause;
__________________
Axapta v.3.0 sp5 kr2 |
|
|
За это сообщение автора поблагодарили: uchenik (1). |
![]() |
#2 |
Участник
|
Цитата:
В данном случае, например, если таблица tablex имеет триггер на вставку в котором происходит вставка в связанную таблицу, которая тоже имеет поле со свойством Identity, то в результате @@identity вернет не код записи таблицы tablex, а код записи подчиненной таблицы. Поэтому в данном конкретном случае лучше использовать функцию SCOPE_IDENTITY(). Примерно так X++: stringSQL = " set nocount on;" + "\n" + " insert into tablex (name) values ('Name3');" + "\n" + " SELECT NewIdent=SCOPE_IDENTITY()" + ""; rec.open(stringSQL); X++: stringSQL = " set nocount on;" + "\n" + " declare @retVal table(f1 integer)" " insert into tablex (name) output inserted.f1 into @retVal values ('Name3');" + "\n" + " SELECT f1 from @retVal" + ""; rec.open(stringSQL); Другими словами, одной команды INSERT явно не достаточно. Нужно либо писать процедуру, либо посылать повторный запрос для поиска только что вставленной записи. Что для Вас проще и привычнее, то и делайте. |
|
Теги |
ado, insert, odbc, ключ |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|