scope_Identity()函数获取最后一个自增ID

原创 2012年03月22日 20:16:59

 

 

SCOPE_IDENTITY
返回插入到同一作用域中的 IDENTITY 列内的最后一个 IDENTITY 值。一个作用域就是一个模块——存储过程、触发器、函数或批处理。因此,如果两个语句处于同一个存储过程、函数或批处理中,则它们位于相同的作用域中。

语法
SCOPE_IDENTITY( )

返回类型
sql_variant

注释
SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY 在功能上相似,因为它们都返回插入到 IDENTITY 列中的值。 

IDENT_CURRENT 不受作用域和会话的限制,而受限于指定的表。IDENT_CURRENT 返回为任何会话和作用域中的特定表所生成的值。有关更多信息,请参见 IDENT_CURRENT。

SCOPE_IDENTITY 和 @@IDENTITY 返回在当前会话中的任何表内所生成的最后一个标识值。但是,SCOPE_IDENTITY 只返回插入到当前作用域中的值;@@IDENTITY 不受限于特定的作用域。

例如,有两个表 T1 和 T2,在 T1 上定义了一个 INSERT 触发器。当将某行插入 T1 时,触发器被激发,并在 T2 中插入一行。此例说明了两个作用域:一个是在 T1 上的插入,另一个是作为触发器的结果在 T2 上的插入。

假设 T1 和 T2 都有 IDENTITY 列,@@IDENTITY 和 SCOPE_IDENTITY 将在 T1 上的 INSERT 语句的最后返回不同的值。

@@IDENTITY 返回插入到当前会话中任何作用域内的最后一个 IDENTITY 列值,该值是插入 T2 中的值。

SCOPE_IDENTITY() 返回插入 T1 中的 IDENTITY 值,该值是发生在相同作用域中的最后一个 INSERT。如果在作用域中发生插入语句到标识列之前唤醒调用 SCOPE_IDENTITY() 函数,则该函数将返回 NULL 值。

有关说明,请参见示例。

示例
下列示例将创建两个表 TZ 和 TY,并在 TZ 上创建一个 INSERT 触发器。当将某行插入表 TZ 中时,触发器 (Ztrig) 将激发并在 TY 中插入一行。

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

--Result set: This is how table TZ looks
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
--Result set: This is how TY looks:
Y_id  Y_name
---------------
100   boathouse
105   rocks
110   elevator

/*Create the trigger that inserts a row in table TY 
when a row is inserted in table TZ*/
CREATE TRIGGER Ztrig
ON TZ
FOR INSERT AS 
   BEGIN
   INSERT TY VALUES ('')
   END

/*FIRE the trigger and find out what identity values you get 
with the @@IDENTITY and SCOPE_IDENTITY functions*/
INSERT TZ VALUES ('Rosalie')

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

--Here is the result set.
SCOPE_IDENTITY
4
/*SCOPE_IDENTITY returned the last identity value in the same scope, which was the insert on table TZ*/

@@IDENTITY
115
/*@@IDENTITY returned the last identity value inserted to TY by the trigger, which fired due to an earlier insert on TZ*/

关于SCOPE_IDENTITY获取自增字段值的问题

看了一下,SCOPE_IDENTITY貌似是最靠谱的,没有并发的问题。 但是我测试了一下,在不到40w的表里新增数据,用SCOPE_IDENTITY获取值很慢啊!比@@INDENTITY慢多了,@@...
  • tianwailaibin
  • tianwailaibin
  • 2011年08月04日 15:08
  • 1131

Select SCOPE_IDENTITY()失效问题

今天上午11点开始测试页面如下代码错误:insql="insert into tg_shenqing(sq_from,sq_xmid,sq_hyid,sq_hyname,sq_qq,sq_email,...
  • a545571406
  • a545571406
  • 2013年12月14日 12:02
  • 339

获取sql server中自增量之scope_identity(),@@Identity,IDENT_CURRENT的区别

http://www.lmwlove.com/ac/ID480 在sql server2005,如果要获某个表最新增加的自增量,我们都知道,可以使用COPE_IDENTITY、  IDENT_...
  • mituan1234567
  • mituan1234567
  • 2014年04月14日 14:17
  • 1274

select SCOPE_IDENTITY()用法

select SCOPE_IDENTITY()返回上面操作的数据表最后row的IDENTITY 列的值;返回插入到同一作用域中的 IDENTITY 列内的最后一个 IDENTITY 值。一个作用域就是...
  • a497785609
  • a497785609
  • 2010年11月07日 16:26
  • 13037

Dapper.NET使用入门(二)【Helper】

勤奋是你生命的密码,能译出你一部壮丽的史诗。Dapper简单的CRUD帮助类 /// /// 对于Dapper.SimpleCRUD扩展主类 /// public s...
  • WuLex
  • WuLex
  • 2016年09月12日 21:04
  • 3580

sql 中获取最后生成的标识值 IDENT_CURRENT ,@@IDENTITY ,SCOPE_IDENTITY 的用法和区别

转载自:http://blog.csdn.net/jinho/article/details/5267507 IDENT_CURRENT 返回为任何会话和任何作用域中的指定表最后生成的标识值。 ...
  • zengTaoCS
  • zengTaoCS
  • 2013年05月20日 09:27
  • 308

获取mysql 自增id 和mysql 下一个自增id的方法

mysql获取表中自增id的方法: 1. 使用 select MAX(id) from tablename; 获取的是表中最大的id;顺序执行  insert ---> delete 插入的...
  • u012481520
  • u012481520
  • 2016年10月10日 17:50
  • 9326

Mysql 中获取刚插入的自增长id的值

Sql代码   insert into user (username,password) VALUES ('zyl','123');   select last_insert_id(...
  • likika2012
  • likika2012
  • 2013年08月14日 09:55
  • 24262

ThinkPHP 3.2.3+ORACLE插入数据BUG修复及支持获取自增Id的上次记录

ThinkPHP 3.2.3+ORACLE插入数据BUG修复及支持获取自增Id的上次记录 thinkphp 3.2.3对Oracle的插入数据存在bug,直接导致我今天debug了一晚上。还好找到...
  • ACMore_Xiong
  • ACMore_Xiong
  • 2016年12月09日 00:56
  • 1337

关于MySQL获取自增ID的几种方法

1. Select Max(id) From Table; 通过取表字段最大值的方式来获取最近一次自增id 缺点: 这种方法在多人操作数据库的软件上不可靠, 举个例子, 你刚插入一条记录. 当你在查询...
  • SabreCode
  • SabreCode
  • 2016年08月09日 01:57
  • 1045
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:scope_Identity()函数获取最后一个自增ID
举报原因:
原因补充:

(最多只允许输入30个字)