正确获得最新插入行的标识

 

 

这样的需求很常见,下面就来介绍Transact-SQL提供的三种获取标识的方法。
(1) IDENT_CURRENT 返回为某个会话和用域中的指定表生成的最新标识值。
(2) @@IDENTITY 返回为跨所有作用域的当前会话中的某个表生成的最新标识值。
(3) SCOPE_IDENTITY 返回为当前会话和当前作用域中的某个表生成的最新标识值。

(1) IDENT_CURRENT 返回为某个会话和用域中的指定表生成的最新标识值。
    语法:IDENT_CURRENT( 'table_name' )
    说明:通过IDENT_CURRENT获取的最新标识是不管会话和作用域的,也就是说无论什么人向指定的表插入新行,它只获取该表最新行的标识。
    示例:打开两个查询窗口(两个会话),分别在这两个查询窗口中写上INSERT语句,并插入到同一张表。
          在任意一个查询窗口中写上SELECT IDENT_CURRENT( 'table_name' );
          结果发现SELECT的返回值是该表最后一次插入时生成的标识。
    备注:如果你想获取自己刚才插入的行标识,建议不要用这个方法;
          如果你想获取整个表最新插入的行标识,建议用这个方法;

exp:

insert into test1 (content) values ('value')
SELECT @@identity

 

(2) @@IDENTITY 返回为跨所有作用域的当前会话中的某个表生成的最新标识值。
    语法:@@IDENTITY
    说明:首先@@IDENTITY获取的是当前会话,也就是说不会获取别人插入的新行标识。它和SCOPE_IDENTITY唯一不同的区别在于,@@IDENTITY是跨作用域的,而SCOPE_IDENTITY是当前作用域。
    示例:两个表A和B,表A建立触发器,一旦增加新记录,触发器会向表B添加一条新记录。
          向表A添加一条记录。
          获取最新标识 SELECT @@IDENTITY;
          结果发现返回的是表B中新行的标识。
    备注:如果你的当前会话中仅对一个表新增,那么完全可以用@@IDENTITY获取最新插入的行标识。
          如果有触发器他插入,则不能使用该方法。

exp:

insert into test1 (content) values ('value')
SELECT IDENT_CURRENT('test1')

 

(3) SCOPE_IDENTITY 返回为当前会话和当前作用域中的某个表生成的最新标识值。
    语法:SCOPE_IDENTITY() 
    说明:该方法获取最新行标识和@@IDENTITY 类似。只是作用域是当前作用域。
    示例:方法同(2);
          结果发现返回值是表A新增的行标识。
    示例:打开两个查询窗口(两个会话),分别在这两个查询窗口中写上INSERT语句,并插入到同一张表。
          在任意一个查询窗口中写上SELECT SCOPE_IDENTITY();
          结果发现SELECT的返回值是该窗口所插入的那一行的标识。
    备注:如果你要获取最新插入的行标识,这个方法是最可靠的

exp:

nsert into test1 (content) values ('value')
SELECT scope_identity()

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值