如何获取插入产生的Identity字段?

Ben*_*ack 4 sql t-sql sql-server stored-procedures

我要将数据插入到表中,如下所示:

Insert Into MyTable (Field1, Field2)
           Values   ('test', 5)
Run Code Online (Sandbox Code Playgroud)

发生插入时,新行将在ID列中具有标识值.如果@ID在我的T-SQL代码中调用了一个变量,如何填充@IDT-SQL插入的结果?

Declare @ID int

Insert into MyTable (Field1, Field2)
             Values ('test', 5)

--//How do I populate @ID with the value of ID of the record that was just inserted?
Run Code Online (Sandbox Code Playgroud)

OMG*_*ies 18

有两种方法 - 第一种方法是使用SCOPE_IDENTITY:

DECLARE @ID INT

INSERT INTO MyTable (Field1, Field2)
VALUES ('test', 5)

SELECT @ID = SCOPE_IDENTITY() 
Run Code Online (Sandbox Code Playgroud)

不要使用@@ IDENTITY - 它包含的值是最后更新的IDENTITY列而不考虑范围.意思是,这是不可靠的,它保存了值 INSERT,但SCOPE_IDENTITY一样.

另一种方法是使用OUTPUT子句(SQL Server 2005+).