如果使用多个insert语句,有没有办法使用SCOPE_IDENTITY?

时间:2012-11-15 14:28:21

标签: c# .net sql spring.net scope-identity

我会将许多数据行从csv文件导入SQL Server数据库(通过Web应用程序)。我需要为客户端返回自动生成的id值。

如果我在循环中执行此操作,则性能非常糟糕(但我可以毫无问题地使用SCOPE_IDENTITY()。)

更高效的解决方案是这样的:

INSERT INTO [MyTable]
VALUES ('1'), ('2'), ('3')
SELECT SCOPE_IDENTITY()

有没有办法获取所有生成的ID,而不仅仅是最后生成的ID?

感谢您的帮助!

祝你好运, 的Thorsten

1 个答案:

答案 0 :(得分:43)

不,SCOPE_IDENTITY()仅为您提供一个,最新插入的IDENTITY值。但你可以check out the OUTPUT clause of SQL Server ....

DECLARE @IdentityTable TABLE (SomeKeyValue INT, NewIdentity INT)

INSERT INTO [MyTable]
OUTPUT Inserted.Keyvalue, Inserted.ID INTO @IdentityTable(SomeKeyValue, NewIdentity)
VALUES ('1'), ('2'), ('3')

运行INSERT语句后,表变量将保留“某些键值”(为此,标识行)以及插入的每行的新插入的ID值。现在对此疯狂! : - )