Здравствуйте, prockrut, Вы писали:
P>народ, подскажите!
P>можно ли в одном запросе через ODBC вставить строку и получить ее IDENTITY P>если да, то как это правильно сделать
Можно попытаться сделать встроенную процедуру и передать identity оттуда в качестве output параметра.
ЗЫ. Вместо @@identity лучше использовать scope_identity(), так как в случае наличия на таблице триггеров, вставляющих данные в другие таблице @@identity вернет значение счетчика не из той таблицы.
Шурыгин Сергей
"Не следует преумножать сущности сверх необходимости" (с) Оккам
S>Можно попытаться сделать встроенную процедуру и передать identity оттуда в качестве output параметра.
S>ЗЫ. Вместо @@identity лучше использовать scope_identity(), так как в случае наличия на таблице триггеров, вставляющих данные в другие таблице @@identity вернет значение счетчика не из той таблицы.
Не нашел, что значит встроенная процедура
Сделал Stored Procedure
Вопрос: как извлечь id?
==================================================================
CREATE PROCEDURE NewObject
@Name nvarchar,
@id int
AS
INSERT INTO MyObjects([Name]) VALUES(@Name)
SET @id= @@IDENTITY -- либо SCOPE_IDENTITY()
GO
==================================================================
Вариант
SQLExecDirect(hStmt, "DECLARE @id int EXECUTE CreateAsset NewObject, 'Name' @id OUTPUT SELECT @id AS [Identity]", SQL_NTS);
Опять же не проходит
запись добавляется
результат 0 Col 1 Row (те не возвращает)
Здравствуйте, prockrut, Вы писали:
S>>Можно попытаться сделать встроенную процедуру и передать identity оттуда в качестве output параметра.
S>>ЗЫ. Вместо @@identity лучше использовать scope_identity(), так как в случае наличия на таблице триггеров, вставляющих данные в другие таблице @@identity вернет значение счетчика не из той таблицы.
P>Не нашел, что значит встроенная процедура P>Сделал Stored Procedure P>Вопрос: как извлечь id?
Чтобы значение возвращалось надо делать так:
==================================================================
CREATE PROCEDURE NewObject
@Name nvarchar,
@id int outputAS
INSERT INTO MyObjects([Name]) VALUES(@Name)
SET @id= @@IDENTITY-- либо SCOPE_IDENTITY()
GO
==================================================================
P>Вариант P>
P>SQLExecDirect(hStmt, "DECLARE @id int EXECUTE CreateAsset NewObject, 'Name' @id OUTPUT SELECT @id AS [Identity]", SQL_NTS);
P>
P>Опять же не проходит
По работе с ODBC я не большой советчик, могу сказать только что надо параметры привязывать к команде посредством SQLBindParameter, и смотреть потом после выполнения команды. Если SQLExecDirect с параметрами не работает, то придеться использовать SQLPrepareStmt/SQLExec (за правильность названий не ручаюсь).
Шурыгин Сергей
"Не следует преумножать сущности сверх необходимости" (с) Оккам