-1

我的数据库中有一个表,其 id 是 int auto increment。当我创建一个 ndew 条目时,一切顺利,id 增加 1。

但是今天我看到了一个大洞。其中一条记录的 id=56,下一条记录的 id=1055。

这是什么原因造成的。我们没有在这个数据库上做备份。

4

2 回答 2

0

很可能在插入或事务回滚时出现了一些错误。表的标识值不受事务影响。因此,例如,即使您在表中插入一个值并回滚事务,您的身份值也将“保持递增”。简短的例子来说明:

create table _test (
    id int identity (1,1)
    ,txt varchar(2)
)
insert into _test(txt)
select 'aa' as txt

insert into _test(txt)
select 'bb' as txt union all 
select 'ccc'

GO

insert into _test(txt)
select 'dd' as txt


select * from _test
于 2013-04-11T13:38:33.707 回答
0

有几件事会导致这种情况

  1. 有人通过运行重新播种DBCC CHECKIDENT
  2. 有人插入了一堆行并删除了它们
  3. 尝试插入一批行,该批失败,一切都回滚,SQL Server 不重用标识值

还请记住,如果您使用DELETE语句删除所有行,则种子不会重置为 1,如果您TRUNCATE是表,则它是

于 2013-04-11T13:33:17.847 回答