По умолчанию API Gateway смешивается с двоичными данными. Вы должны установить двоичный тип контента для шлюза API (который вы можете сделать через консоль ).
Убедитесь, что дважды проверьте, что заголовок Content-Type
в ваших запросах установлен на правильное значение, а также заголовок Accept
установлен на правильное значение.
Попробуйте
EXEC 'INSERT INTO ' + quotename(@table) ' blah...; SELECT @@IDENTITY'
или лучше,в соответствии с это
EXEC 'INSERT INTO ' + quotename(@table) ' blah...; SELECT SCOPE_IDENTITY()'
Согласно документам Microsoft T-SQL:
IDENT_CURRENT похож на SQL Идентификационные функции Server 2000 SCOPE_IDENTITY и @@ IDENTITY. Все три функции возвращают последний сгенерированный ценности личности. Тем не менее, сфера и сеанс, на котором определяется последний в каждой из этих функций различаются:
IDENT_CURRENT возвращает последний значение идентичности, сгенерированное для конкретная таблица в любой сессии и любой scope.
@@ IDENTITY возвращает последний идентификатор значение, сгенерированное для любой таблицы в текущий сеанс во всех областях.
SCOPE_IDENTITY возвращает последний значение идентичности, сгенерированное для любой таблицы в текущем сеансе и текущем scope.
Итак, я бы сказал, нет, IDENT_CURRENT не гарантирует возврата правильного значения. Это может быть последнее значение IDENTITY, вставленное в другой сеанс.
Вместо этого я должен использовать SCOPE_IDENTITY - это должно работать надежно.
Marc
There is a bug in SCOPE_IDENTITY() I have switched my stored procedures over to the methodology used to retrieve default values from an insert:
declare @TheNewIds table (Id bigint, Guid uniqueidentifier)
insert [dbo].[TestTable] output inserted.Id, inserted.Guid into @TheNewIds
values (default);
select @Id = [Id], @Guid = [Guid] from @TheNewIds;
Я думаю, что Scope_Identity () - это то, что вы ищете, что даст вам самую последнюю идентификацию в текущем Объем.
Я бы хотел добавить свое любимое решение, используя ключевое слово OUTPUT. Поскольку INSERT может поддерживать несколько строк одновременно, мы бы хотели знать вставленные идентификаторы. Вот так:
-- source table
if object_id('Source') is not null drop table Source
create table Source
(
Value datetime
)
-- populate source
insert Source select getdate()
waitfor delay '00:00.1'
insert Source select getdate()
waitfor delay '00:00.1'
insert Source select getdate()
select * from Source -- test
-- destination table
if object_id('Destination') is null
create table Destination
(
Id int identity(1, 1),
Value datetime
)
-- tracking table to keep all generated Id by insertion of table Destination
if object_id('tempdb..#Track') is null
create table #Track
(
Id int
)
else delete #Track
-- copy source into destination, track the Id using OUTPUT
insert Destination output inserted.Id into #Track select Value from Source
select Id from #Track -- list out all generated Ids
Продолжайте запускать это несколько раз, чтобы почувствовать, как это работает.