如何使用SCOPE_IDENTITY检索插入的最后一个ID

Nig*_*ght 7 sql-server stored-procedures

假设我有两张桌子.第一个表的主键是另一个表的外键.

Member的主键是外键Member_detail.

因此,当我Member使用存储过程在表中插入一行时,我需要获取要添加到Member_detail表中的主键值.

我使用的一种方法是:

SELECT Max(MemberID) 
FROM Member
Run Code Online (Sandbox Code Playgroud)

然后将它传递Memberid给我的Member_detail表,但是在下面的帖子中,我读到该Max功能不建议我应该使用SCOPE_IDENTITY,但我不知道如何使用它.

谁能给我一些例子?

sti*_*net 10

SCOPE_IDENTITY 返回插入同一范围内的标识列的最后一个标识值.

鉴于你有2个表:

Member: id int (primaryKey), name varchar

Member_Detail: id int (primaryKey), pk int (foreignKey), name varchar
Run Code Online (Sandbox Code Playgroud)

你可以这样做:

DECLARE @MemberId int

INSERT INTO Member (name) VALUES ('hello');

SET @MemberId = SCOPE_IDENTITY()

INSERT INTO Member_Detail (pk, name) VALUES (@MemberId, 'hello again')
Run Code Online (Sandbox Code Playgroud)

MSDN参考:

SCOPE_IDENTITY(Transact-SQL)

返回插入同一范围内的标识列的最后一个标识值.范围是一个模块:存储过程,触发器,函数或批处理.因此,如果两个语句在同一存储过程,函数或批处理中,则它们在同一范围内.