使用IDENTITY資料行發生跳號的可能狀況
問題描述
在論壇上看到有網友討論到使用IDENTITY資料行,在沒有刪除資料的狀況下發生跳號,發生這樣的原因有可能是因為ROLLBACK所導致,下一節就針對上述狀況做一點實驗,來重現這個問題。
實驗步驟
透過下列T-SQL指令碼,在建立資料表之後先新增10筆資料。
use tempdb
go
if exists (select * from sys.tables where name = 't1')
drop table t1
go
create table t1
(c1 int identity,c2 varchar(10))
go
--第一次新增10筆資料
insert into t1(c2) values ('test')
go 10
dbcc checkident('t1')
透過DBCC CHECKIDENT可以看到目前流水號已經來到第10號。
接著再新增3筆資料之後故意ROLLBACK。
--新增3筆資料然後故意Rollback
begin tran
insert into t1(c2) values ('test')
go 3
rollback tran
go
--已經造成跳號了,下一筆序號會從14號開始
dbcc checkident('t1')
由下圖可知,目前流水號已經是13號。
所以當您在新增資料時,會從14號開始。