0

我有两张桌子UserInfoUserContact. UserInfo我使用标识列 ( ) 成功地将数据插入到表中ID。我正在使用存储过程将数据插入表中。

UserInfo (Id, FirstName, LastName, Address)   
Usercontact(Id, UserInfoId, ContactNumber)

我想插入第二个表。如何从第一个表中获取 ID 以及如何在第二个表的存储过程中使用该 ID。

4

2 回答 2

1

对于 SQL SERVER:使用SCOPE_IDENTITY (Transact-SQL):返回插入到同一范围内的标识列中的最后一个标识值。范围是一个模块:存储过程、触发器、函数或批处理。因此,如果两条语句在同一个存储过程、函数或批处理中,则它们属于同一范围。

例如。:

Insert Into UserInfo (FirstName,LastName,Address) 
Values (@FirstName,@LastName,@Address);

Declare @id int
SELECT @id = SCOPE_IDENTITY();

Insert Into Usercontact (Id,UserInfoId,ContactNumber) 
Values (@id,@UserInfoId,@ContactNumber);
于 2013-01-18T12:48:50.840 回答
0

您可以使用 Scope_identity() 或 IDENT_CURRENT('tablename')

SELECT SCOPE_IDENTITY()
它返回连接上和同一范围内的语句产生的最后一个 IDENTITY 值,而不管产生该值的表。SCOPE_IDENTITY() 与@@IDENTITY 一样,将返回在当前会话中创建的最后一个身份值,但它也会将其限制在您当前的范围内。换句话说,它将返回您显式创建的最后一个身份值,而不是由触发器或用户定义的函数创建的任何身份。

SELECT IDENT_CURRENT('tablename')
它返回表中生成的最后一个 IDENTITY 值,与创建该值的连接无关,也与生成该值的语句的范围无关。IDENT_CURRENT 不受范围和会话限制;它仅限于指定的表。IDENT_CURRENT 返回为任何会话和任何范围内的特定表生成的标识值。

*注意:为避免与稍后添加触发器相关的潜在问题,请始终使用 SCOPE_IDENTITY() 来返回 T SQL 语句或存储过程中最近添加的行的标识。*

有关更多信息,请参阅此博客文章

http://blog.sqlauthority.com/2007/03/25/sql-server-identity-vs-scope_identity-vs-ident_current-retrieve-last-inserted-identity-of-record/

于 2013-01-18T12:57:48.500 回答