请楼主参考一下下面的帖子中邹建给出的在SQLSERVER2000中的方案,要使用触发器:
http://community.csdn.net/Expert/topic/4868/4868036.xml?temp=.9568903

解决方案 »

  1.   

    IF OBJECT_ID('tempdb..#test') IS NOT NULL DROP TABLE #testCREATE TABLE #test(col_1 int identity(1, 1) PRIMARY KEY, col_2 int)INSERT INTO #test VALUES(56)INSERT INTO #test
    SELECT 1
    UNION ALL SELECT 2
    UNION ALL SELECT 3
    UNION ALL SELECT 4
    UNION ALL SELECT 5
    DECLARE @maxindex INT,@indexNum INT,@s VARCHAR(1000)
    SELECT @maxindex=SCOPE_IDENTITY(),@indexNum=@@ROWCOUNT,@s='SELECT [IDENTITY]=' + RTRIM(@maxindex)WHILE @indexNum>0
    SELECT @maxindex=@maxindex-1,@indexNum=@indexNum-1,@s=@s +  ' UNION ALL SELECT ' + RTRIM(@maxindex)
    EXEC(@s)
      

  2.   

    如果有大量并发的情况建议使用邹建提供的使用触发器方法.例如
    insert table select * from tbx where ...导致有数万行插入时,这个耗时过程中其它连接也可能向表中插入了行,这样可能会导致该连接中插入行的ID不连续,通过@@ROWCOUNT与最后一行的SCOPE_IDENTITY()之间的差值来计算的ID中可能会包含其它连接插入生成的ID.
    邹建在那个帖子中的并发测试很有说服力.在并发情况下,使用触发器获得的ID没有丝毫的错误,完全是该连接内插入行的ID,可以看到并发情况下获得的ID的确是不连续的.