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;"

在插入某些自增表的时候,需要将其打开:
语法:SET IDENTITY_INSERTTableName ON


----SCOPE_IDENTITY 和 @@IDENTITY 返回在当前会话中的任何表内所生成的最后一个标识值。但是,SCOPE_IDENTITY 只返回插入到当前作用域中的值;@@IDENTITY 不受限于特定的作用域。@@IDENTITY是个全局的变量,而 SCOPE_IDENTITY是你当前的插入到数据库的一个变量----
USE tempdb
GO
CREATE TABLE TZ (
Z_id int IDENTITY(1,1)PRIMARY KEY,
Z_name varchar(20) NOT NULL)

INSERT TZ
VALUES ('Lisa')
INSERT TZ
VALUES ('Mike')
INSERT TZ
VALUES ('Carla')

SELECT * FROM TZ

--运行结果.
Z_id Z_name
-------------
1 Lisa
2 Mike

3 Carla


CREATE TABLE TY (
Y_id int IDENTITY(100,5)PRIMARY KEY,
Y_name varchar(20) NULL)

INSERT TY (Y_name)
VALUES ('boathouse')
INSERT TY (Y_name)
VALUES ('rocks')
INSERT TY (Y_name)
VALUES ('elevator')


SELECT * FROM TY
--结果:
Y_id Y_name
---------------
100 boathouse
105 rocks

110 elevator


/*创建一个触发器,当向TZ表里面增加数据的时候,自动向TY表里面增加数据*/

CREATE TRIGGER Ztrig
ON TZ
FOR INSERT AS
BEGIN
INSERT TY VALUES ('')
END

/*调用触发器,级联增加(类似数据库的级联增加)*/

INSERT TZ VALUES ('Rosalie')

select * from dbo.TY
select * from dbo.TZ

SELECT SCOPE_IDENTITY() AS [SCOPE_IDENTITY]
GO
SELECT @@IDENTITY AS [@@IDENTITY]
GO

SCOPE_IDENTITY

4

/*SCOPE_IDENTITY 返回的是添加到 TZ表里面的ID*/


@@IDENTITY

115

/*@@IDENTITY 返回的是(当前会话中的任何表内所生成的最后一个标识值)这个值是触发器插入到TZ表这个作用域的标识.*/

小心使用@@identity

http://www.cnblogs.com/rijing2004/archive/2008/01/09/sqlserver_identity.html