有个表的一个字段(id)设置了identity属性,但是今天用户反映出现了断号的情况,比如上一次到了1000,插入下一条数据的时候变成了1005,中间几个连号(1001~1004)不知道为什么没有了。请问各位高手什么情况下会发生这样的情况阿,急,各位帮帮忙~~~现在可以确定的事情是:通过检查程序的log,没有人删除过这个表的数据,确实是在插入的时候一下子变成了1005

解决方案 »

  1.   


    use tempdb
    gocreate table test(id int identity(1,1),name char(1))
    goinsert test select 'a'
    godbcc checkident('dbo.test',reseed,10)
    goinsert test select 'b'
    goselect * from test
    godrop table test
    go/**
    1 a
    11 b
    **/这种可能排除了么?
      

  2.   

    一个字段(id)设置了identity属性,是唯一的,删除了也没有影响.如果要重新搞.--search
    select * , newid = (select count(1) from tb where id < t.id) + 1 from tb t
      

  3.   


    1:这个可能性几乎可以排除
    2:看不懂,什么叫种子重置?是重新设置identity属性吗?那原来存在的数据怎么办?原来断开的号有解决办法吗?
      

  4.   


    你的意思是这个问题是SQL Server本来就有的bug吗?我在网上看到也有人这么说,但是一直苦于没有专家权威的说法,不知道谁能给找个权威的解释,我们也好向用户交差,呵呵
      

  5.   


    一般什么情况下会发生插入失败呢?比如主键冲突?identity列是唯一主键应该不会发生这种情况吧。或者字段长度溢出?
      

  6.   

    identity是否连续并不重要,因为记录有插入总会有删除的。
    编号一般都是在select的时候通过排序的得到的。