28

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

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

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

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

有什么方法可以获取所有生成的 ID,而不仅仅是最后生成的 ID?

谢谢你的帮助!

最好的问候,托尔斯滕

4

1 回答 1

56

不,SCOPE_IDENTITY()只给你一个最新的插入IDENTITY值。但是您可以查看OUTPUTSQL 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的每一行的新插入值。现在为此发疯!:-)

于 2012-11-15T14:32:30.767 回答