2013-04-11 39 views
-1

我在我的數據庫有一個ID爲int自動增量的表。當我創建一個ndew條目時,一切都很順利,id增加1.自動增量在ID之間的差距

但今天我看到了一個大洞。其中一條記錄的id = 56,下一條記錄的id = 1055。

什麼可能導致這種情況。我們沒有在這個數據庫上做備份。

+0

可能重複http://stackoverflow.com/questions/14642013/why-are-there-gaps-in-my -identity-column-values) – Pondlife 2013-04-11 14:23:06

回答

0

有幾件事情,可能會導致該

  1. 有人通過運行DBCC CHECKIDENT
  2. 有人補種表插入一堆行和刪除它們
  3. 一批行試圖要插入,該批次不合格, 一切都被回滾,SQL Server不會重用身份 值

還要記住,如果刪除所有具有DELETE語句的行,則種子不會重置爲1,如果您的表爲

+0

可以以某種方式檢查DBCC CHECKIDENT是否在這個數據庫上執行? – 2013-04-11 13:35:21

+0

不是我所知道的 – SQLMenace 2013-04-11 13:39:35

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 
的[?爲什麼在我的身份列值的差距(