Получить идентификатор последней вставленной записи [дубликат]
этот вопрос уже есть ответ здесь:
- как получить последний вставленный id? 15 ответов
я вставляю несколько записей в таблицу, используя следующий запрос:
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
все из которых-с различными подробностями о области и сеансах-возвращают один идентификатор.
решение: добавьте одну строку и получите ее идентификатор, затем вставьте следующую....