我不确定在多用户几乎同时向数据库录入数据的时候,用@@Identity是否就是能返回当时成功插入数据时的自增长号.所以求高手给个答案了 ..
谢谢

解决方案 »

  1.   

     如果每个用户都是独立的session的话,引用@@Identity是可靠的
      

  2.   

    1
    @@Identity2
    select max(自增列) frm tb 如果是多用户,则两个方法都不完全对.
      

  3.   

    @@IDENTITY和SCOPE_IDENTITY和IDENT_CURRENT的区别
    1,@@IDENTITY是得到当前会话的所有范围的最后插入的IDENTITY值 
    2,SCOPE_IDENTITY是得到当前会话的当前范围的最后插入的IDENTITY值 
    3,IDENT_CURRENT是得到指定表的最后插入的IDENTITY值,与会话、范围无关。因为在插入和得到IDENTITY值之间可能会有其它的事情发生,但是你只想得到我刚才插入的IDENTITTY值,只有使用SCOPE_IDENTITY函数才行。以下是测试SQL 
    (1)
    USE pubs
    DROP TABLE t6
    DROP TABLE t7
    GO
    CREATE TABLE t6(id int IDENTITY)
    CREATE TABLE t7(id int IDENTITY(100,1))
    GO
    CREATE TRIGGER t6ins ON t6 FOR INSERT 
    AS
    BEGIN
       INSERT t7 DEFAULT VALUES
    END
    GO
    --end of trigger definitionSELECT   * FROM t6
    --id is empty.SELECT   * FROM t7
    --id is empty.--Do the following in Session 1
    INSERT t6 DEFAULT VALUES
    declare @i int
    set @i = 0
     while @i < 20000
       begin
       set @i = @i + 1
       print @i
       endSELECT @@IDENTITY as "@@IDENTITY0"
    /*Returns the value 100, which was inserted by the trigger.*/SELECT SCOPE_IDENTITY()   'SCOPE_IDENTITY()0'
    /* Returns the value 1, which was inserted by the 
    INSERT stmt 2 statements before this query.*/SELECT IDENT_CURRENT('t7') 'IDENT_CURRENT(t7)0'
    /* Returns value inserted into t7, i.e. in the trigger.*/SELECT IDENT_CURRENT('t6') 'IDENT_CURRENT(t6)0'
    /* Returns value inserted into t6, which was the INSERT statement 4 stmts before this query.*/-- Do the following in Session 2
    SELECT @@IDENTITY "@@IDENTITY1"
    /* Returns NULL since there has been no INSERT action 
    so far in this session.*/SELECT SCOPE_IDENTITY() 'SCOPE_IDENTITY()1'
    /* Returns NULL since there has been no INSERT action 
    so far in this scope in this session.*/SELECT IDENT_CURRENT('t7') 'IDENT_CURRENT(t7)1'
    /* Returns the last value inserted into t7.*/
    当在执行while @i < 20000
       begin
       set @i = @i + 1
       print @i
       end这个地方的时候,就可以用
    INSERT t6 DEFAULT VALUES
    INSERT t7 DEFAULT VALUES
    select * from t6
    select * from t7来进行操作数据库等到全部执行完了,你就会发现只有SCOPE_IDENTITY列永远是1