获取上次插入记录的ID

Nav*_*hat 6 sql sql-server-2008

我正在使用以下查询将多个记录插入到表中:

INSERT INTO Table1(FirstName, LastName, EmailAddress)
    SELECT t2.FirstName, t2.LastName, t2.EmailAddress
    FROM Table2 t2
Run Code Online (Sandbox Code Playgroud)

由于查询是插入多个记录,我不能使用SCOPE_IDENTITY来检索PK.是否有任何方法可以获取最后插入记录的ID?

Ric*_*iwi 13

SCOPE_IDENTITY()将正确地为您提供最后的ID.您需要的是将它与@@ Rowcount结合使用,为您提供ID范围.正如其他理查德所指出的那样,这只有在你的增量设置为1时才有效

例如:

declare @last int, @first int
insert ...
select @last = scope_identity(), @first = scope_identity() - @@rowcount + 1
Run Code Online (Sandbox Code Playgroud)

另一种方法(在SQL Server 2008中使用此方法获得保证结果)是使用OUTPUT子句

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

-- Get the ids
SELECT id from @Ids
Run Code Online (Sandbox Code Playgroud)

该表现在包含所有插入的ID

  • `@@ rowcount`很有意思.但显然它假设增量为1.我假设它假设不可能插入插入(例如,不同的会话):这可以保证吗? (2认同)