SQL Server 好象没有这样的问题,倒是在Oracle中用Sequence经常碰上。
估计是因为人为的删除了中间的数据记录。

解决方案 »

  1.   

    不是,应该我们是不删记录的
    insert时没插那个字段,以前也没碰过,今天不知怎么回事
      

  2.   

    --楼主情况,我从来没有遇到,应该是删除数据了的,
    --试试这个恢复.
    DBCC CHECKIDENT (表名, RESEED, 1)  --1就是重新从1开始
      

  3.   

    to zlp321002
    DBCC CHECKIDENT('t_pay_type',RESEED,1)
    返回结果,库中数据没变
    检查标识信息: 当前标识值 '8',当前列值 '1'。
    DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
      

  4.   

    把你的表数据全表导出到一个新表(标识列不要)然后truncate table原来的表,然后从你的新表中再将数据导入。
    sql server是不会出现你说的情况的,除非有人删掉数据
      

  5.   

    to xzq111
    我知道你说的那种方法,但觉得比较麻烦
    标识这种问题,以前用的好好的,这次不知怎么回事,会不会与设置有关
      

  6.   

    有一种可能会产生这种现象,如果你通过事务来向表插入数据,但某次事务因某种原因失败而产生回滚,但identity不会产生回滚,因此,下次事务执行成功了,但identity因为上次事务失败没有回滚,所以会产生不连续。检查你的事务是不是每次都成功
      

  7.   

    to xzq111
    那identity不会产生回滚,有什么解决办法,谢了
      

  8.   

    .....
    DECLARE @CURRENTIDENT INT
    ..................
    IF @@ERROR<>0
    begin
      set @CURRENTIDENT = (SELECT MAX(ID) FROM YOURTABLE)
      dbcc checkIdent(yourtable,Reseed,@CURRENTIDENT)
      rollback tran
    end
    else
     ....
      

  9.   

    to xzq111
    DBCC CHECKIDENT('t_pay_type',RESEED,8)
    执行没改变数据啊
      

  10.   

    它不会改变原有数据库中已经有的identity 列的值,只会决定下次插入数据时,identity列从什么值开始计算。
    在T-SQL执行,如果成功,你再插入数据,这条数据的值应该是9,不可能没有改变。我上面那段代码中执行dbcc是为了解决事务错误是identity无法回滚的问题。
      

  11.   

    to xzq111
    我试试,先谢了
      

  12.   

    如果确定没有删除数据,肯定是insert提交不成功,rollback了。而这是identity 列的计数是增加的