ДОЛЖНОСТНОЕ ЛИЦО T-SQL и объем

По умолчанию API Gateway смешивается с двоичными данными. Вы должны установить двоичный тип контента для шлюза API (который вы можете сделать через консоль ).

Убедитесь, что дважды проверьте, что заголовок Content-Type в ваших запросах установлен на правильное значение, а также заголовок Accept установлен на правильное значение.

5
задан core 8 April 2009 в 21:21
поделиться

5 ответов

Попробуйте

EXEC 'INSERT INTO ' + quotename(@table) ' blah...; SELECT @@IDENTITY'

или лучше,в соответствии с это

EXEC 'INSERT INTO ' + quotename(@table) ' blah...; SELECT SCOPE_IDENTITY()'
6
ответ дан 18 December 2019 в 14:51
поделиться

Согласно документам Microsoft T-SQL:

IDENT_CURRENT похож на SQL Идентификационные функции Server 2000 SCOPE_IDENTITY и @@ IDENTITY. Все три функции возвращают последний сгенерированный ценности личности. Тем не менее, сфера и сеанс, на котором определяется последний в каждой из этих функций различаются:

IDENT_CURRENT возвращает последний значение идентичности, сгенерированное для конкретная таблица в любой сессии и любой scope.

@@ IDENTITY возвращает последний идентификатор значение, сгенерированное для любой таблицы в текущий сеанс во всех областях.

SCOPE_IDENTITY возвращает последний значение идентичности, сгенерированное для любой таблицы в текущем сеансе и текущем scope.

Итак, я бы сказал, нет, IDENT_CURRENT не гарантирует возврата правильного значения. Это может быть последнее значение IDENTITY, вставленное в другой сеанс.

Вместо этого я должен использовать SCOPE_IDENTITY - это должно работать надежно.

Marc

4
ответ дан 18 December 2019 в 14:51
поделиться

http://blog.sqlauthority.com/2009/03/24/sql-server-2008-scope_identity-bug-with-multi-processor-parallel-plan-and-solution/

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;
2
ответ дан 18 December 2019 в 14:51
поделиться

Я думаю, что Scope_Identity () - это то, что вы ищете, что даст вам самую последнюю идентификацию в текущем Объем.

1
ответ дан 18 December 2019 в 14:51
поделиться

Я бы хотел добавить свое любимое решение, используя ключевое слово 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

Продолжайте запускать это несколько раз, чтобы почувствовать, как это работает.

0
ответ дан 18 December 2019 в 14:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: