新在表中插入一行,现在想立即得到新插入的主键
新在表中插入一行,现在想立即得到新插入的主键,(因为当前状态下,可能还有表不断的被新插入记录,我插入的记录,可能已经不是最新的了,但我只想要我刚才插入的记录的主键),请问如何做?难道要加个锁?最好给个具体的例子!
如果是pl/sql,我可以用这个语句做:
insert ... returning .. into那如果是t/sql呢?用锁??

解决方案 »

  1.   

    create trigger kk on 表名
    after insert
    as
    begin 
      declare @id int 
      set @id=(select id from inserted)--假设ID是你表的主键
    PRINT '你插入的数据的主键是'+convert(varchar(10),@id)
    end
      

  2.   

    -- =========================================
    -- -----------t_mac 小编-------------
       ---希望有天成为大虾---- 
    -- =========================================IF OBJECT_ID('tb') IS NOT NULL
      DROP TABLE tb
    GO
    CREATE TABLE tb(id int primary key not null, b int)
    go
    create trigger kkkkk on tb
    after insert
    as
    begin 
      declare @id int 
      set @id=(select id from inserted)--假设ID是你表的主键
    PRINT '你插入的数据的主键是'+convert(varchar(10),@id)
    end
    insert into tb
    select  1,2
    go
    /*------------
    你插入的数据的主键是1(1 行受影响)
    -------*/
      

  3.   

    在一条 INSERT、SELECT INTO 或大容量复制语句完成后,@@IDENTITY 中包含语句生成的最后一个标识值。如果语句未影响任何包含标识列的表,则 @@IDENTITY 返回 NULL。
    如果插入了多个行,生成了多个标识值,则 @@IDENTITY 将返回最后生成的标识值。
    如果语句触发了一个或多个触发器,该触发器又执行了生成标识值的插入操作,那么,在语句执行后立即调用 @@IDENTITY 将返回触发器生成的最后一个标识值。
    如果对包含标识列的表执行插入操作后触发了触发器,并且触发器对另一个没有标识列的表执行了插入操作,则 @@IDENTITY 将返回第一次插入的标识值。
    出现 INSERT 或 SELECT INTO 语句失败或大容量复制失败,或者事务被回滚的情况时,@@IDENTITY 值不会恢复为以前的设置。
    @@IDENTITY 返回的是你执行的语句的标识值,而不会返回其他人并行执行的标识值。
      

  4.   

    参考下面两篇,一个是单个的,另一个是批量的:
    http://www.cnblogs.com/insus/articles/2017786.html
    http://www.cnblogs.com/insus/articles/1916702.html