在SQL Server中,执行Insert时是否可以获取记录的"id"?

Kei*_*ino 12 sql-server identity

在SQL Server 2005中,我在表中的"id"字段中将"Is Identity"属性设置为"Yes".因此,当在该表上执行Insert时,"id"将自动设置为下一个递增整数.执行Insert是否有一种简单的方法来获取"id"的设置,而不必在Insert之后立即执行Select语句?

重复:
获取插入行的标识的最佳方法?

Jos*_*man 32

至少在.Net中,您可以一次性向服务器发送多个查询.我在我的应用程序中这样做:

command.CommandText = "INSERT INTO [Employee] (Name) VALUES (@Name); SELECT SCOPE_IDENTITY()";
int id = (int)command.ExecuteScalar();
Run Code Online (Sandbox Code Playgroud)

奇迹般有效.

  • 当仅处理单行更新时,此解决方案很好.有关良好的批量更新解决方案,请参阅kamajo的答案. (3认同)

小智 15

如果要插入多行,则在语句中使用OUTPUTINSERTED.columnname子句insert是将所有id都放入临时表的简单方法.

DECLARE @MyTableVar table( ID int,  
                               Name varchar(50),  
                               ModifiedDate datetime);  
INSERT MyTable  
        OUTPUT INSERTED.ID, INSERTED.Name, INSERTED.ModifiedDate INTO @MyTableVar  
SELECT someName, GetDate() from SomeTable  
Run Code Online (Sandbox Code Playgroud)