我使用以下查询将多个记录插入表中:
INSERT INTO Table1(FirstName, LastName, EmailAddress)
SELECT t2.FirstName, t2.LastName, t2.EmailAddress
FROM Table2 t2
由于查询插入了多条记录,我无法使用 SCOPE_IDENTITY 来检索PK。有没有方法可以获取最后插入记录的ID?
答案 0 :(得分:13)
SCOPE_IDENTITY()会正确地为您提供最后一个ID。您需要的是将它与@@ Rowcount结合使用,为您提供ID范围。 正如其他理查德指出 一样,只有在您的增量设置为1
时才会有效例如:
declare @last int, @first int
insert ...
select @last = scope_identity(), @first = scope_identity() - @@rowcount + 1
另一种方法 (在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
该表现在包含所有插入的ID
答案 1 :(得分:0)
SCOPE_IDENTITY
的文档还列出了@@IDENTITY
和IDENT_SCOPE
所有关于范围和会话的详细信息 - 返回单个标识符。
解决方案:添加一行并获取其身份,然后插入下一行....