如果表中有个自段是identity,那么想表中插一条数据,怎么知道是你刚刚插的数据,
例如:
table a
(
seq int identity(1,1),
int a,
)
我插一条a的值为2的记录,当然在同时别人也可能查记录进去的,我怎么找到我刚刚插的一条记录

解决方案 »

  1.   

    select * from tb where seg in
    (select max(seq) from a where a = 2)
      

  2.   

    select * from a where seq=@@IDENTITY
      

  3.   

    select * from a where seq=SCOPE_IDENTITY()
      

  4.   

    hrb2008()  正确的解答~谢谢先
      

  5.   

    用@@identity是肯定不对,但是刚刚看的scope_identity的help, (kafuwei说的对)因为涉及到一个同步的问题,所以不知道 scope_identity对不对
      

  6.   

    select * from a where seq=SCOPE_IDENTITY()
    不涉及到trigger的连续触发插入,是没有问题的
      

  7.   

    scope_identity为作用域
    如果有触发器插入同步插入到另一个表时
    返回的是另一个表的identity列的值
      

  8.   

    写一个存储过程,先锁定,后插入,再查询,再放锁,其它的方式都会出现同步的问题。查询的条件就是获得当前表中最大的identity值,或者用其它可以唯一标识的列,这样不会有同步的问题。不建议用@@IDENTITY,有两个问题。1。如果你有触发器,触发器中又插入了其它的表,而且其中表也有identity值的话,@@IDENTITY会被二次更新。2。如果你的INSERT是失败的话,@@IDENTITY依然会返回增加的值,也就是说@@IDENTITY不会回滚。
      

  9.   

    scope_identity返回的是同一作用域的与有没有触发器无关