Пишу клиента к базе данных (MS VC 6.0, MFC, MS SQL 2k). Выполняю следующий код:
_ConnectionPtr MyBase;
...// Установил соединеие.
// Добавляю запись
m_pBase->Execute(LPCSTR("insert into MyTable (Nik) values ('Test');"), NULL, adCmdUnknown);
// Пытаюсь определить Id добавленной записи
_RecordsetPtr rs;
rs->Open(LPCSTR("select SCOPE_IDENTITY();"), v, adOpenStatic, adLockReadOnly, adCmdText);
_variant_t v;
rs->GetFieldValue(0, v);
На удивление в v оказывается NULL. Где я просчитался? Не знаю даже куда и копать ;(
Вот тут вот добрые люди на
www.sql.ru объяснили, что нужно выполнять insert и select SCOPE_IDENTITY() в одном батче. Пробую открывать рекодсет следующим запросом:
insert into MyTable (Name) values ('Test'); select SCOPE_IDENTITY();
Рекордсет не открывается. Посоветовали делать так:
set nocount on; insert into MyTable (Name) values ('Test'); select SCOPE_IDENTITY();
Рекордсет открывается, возвращается Id добавленной записи, но запись добавляется _шесть_ раз! SQL Profiler показывает шестикратное выполнение запроса. Но если
set nocount on убрать, то запрос выполнятеся один раз и запись добавляется одна. В чём может быть дело?