SCOPE_IDENTITY 和 @@IDENTITY 的作用都是取得返回在当前会话中的任何表内所生成的最后一个标识值,简单的说就是在执行一条插入语句之后使用@@IDENTITY的全局变量,取得插入记录的ID号但是有个问题就是,@@IDENTITY是全局的,所以在他的功能会体现在所有作用域,一个操作,一个触发器,一个存储过程叫做一个作用域,这时候如果出现多个作用域的情况的时候,@@IDENTITY所取得的ID号就是最后一个作用域产生的结果。这时候我们要使用SCOPE_IDENTITY方法来作了。SCOPE_IDENTITY 只返回插入到当前作用域中的值;@@IDENTITY 不受限于特定的作用域。 使用方法:select SCOPE_IDENTITY() as ID from [table]select @@IDENTITY as ID from [table] 实例: sql="SET NOCOUNT ON;insert into [Table](Item) values('"&Item&"')"sql=sql&";select @@IDENTITY as ID from [Table];SET NOCOUNT OFF;"
使用方法:select SCOPE_IDENTITY() as ID from [table]select @@IDENTITY as ID from [table]
实例:
sql="SET NOCOUNT ON;insert into [Table](Item) values('"&Item&"')"sql=sql&";select @@IDENTITY as ID from [Table];SET NOCOUNT OFF;"
CREATE PROCEDURE AddUser
(
@Username nvarchar(50),
@Email nvarchar(100),
@Password nvarchar(50),
@UserID int OUTPUT
)
ASINSERT INTO Users
(
Username,
Email,
Password
)VALUES
(
@Username,
@Email,
@Password
)SELECT
@UserID = @@Identity
GO
===========
.net调用存储过程就比较简单了。
如果你SQLCommand来执行INSERT的SQL语句后,如果该connection未关闭,随后通过该connection来获取@@identity仍为同一个域,应该没有问题。