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

Tho*_*aus 22 .net c# sql spring.net scope-identity

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

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

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

INSERT INTO [MyTable]
VALUES ('1'), ('2'), ('3')
SELECT SCOPE_IDENTITY()
Run Code Online (Sandbox Code Playgroud)

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

谢谢你的帮助!

最好的问候,托尔斯滕

mar*_*c_s 43

不,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')
Run Code Online (Sandbox Code Playgroud)

一旦运行了INSERT语句,表变量将保存"某些键值"(为此,标识行)以及插入ID的每行的新插入值.现在对此疯狂!:-)

  • @DannyRancher:取决于 - “Inserted”伪表指的是您**插入**的表 - 在我的示例中,它指的是“MyTable”。因此,如果该表包含列“Keyvalue”,那么它将在“OUTPUT”语句中显示。这与任何特定的 SQL Server 版本无关...... (2认同)