Получить идентификатор последней вставленной записи [дубликат]

этот вопрос уже есть ответ здесь:

я вставляю несколько записей в таблицу, используя следующий запрос:

INSERT INTO Table1(FirstName, LastName, EmailAddress)
    SELECT t2.FirstName, t2.LastName, t2.EmailAddress
    FROM Table2 t2

после запроса вставляет несколько записей, я не могу использовать функция scope_identity для извлечения PK. Есть ли какой-либо способ получить ID последних вставленных записей?

2 ответов


SCOPE_IDENTITY () правильно даст вам последний идентификатор. Вам нужно объединить его с @@Rowcount, чтобы дать вам диапазон идентификаторов. как указывает другой Ричард это работает только если ваш инкремент равен 1

например:

declare @last int, @first int
insert ...
select @last = scope_identity(), @first = scope_identity() - @@rowcount + 1

другой способ (используйте это в SQL Server 2008 для гарантированных результатов) для этого нужно использовать выход п.

declare @ids table (id int)
INSERT INTO Table1 (FirstName ,LastName ,EmailAddress)
output inserted.id into @ids

-- Get the ids
SELECT id from @Ids

в таблица теперь содержит все вставленные идентификаторы


документация SCOPE_IDENTITY перечислены @@IDENTITY и IDENT_SCOPE все из которых-с различными подробностями о области и сеансах-возвращают один идентификатор.

решение: добавьте одну строку и получите ее идентификатор, затем вставьте следующую....