有表格如下
create table place( place_id smallint identity(1,1), place_name varchar(50), primary key(place_id)) insert into place(place_name) values('a') insert into place(place_name) values('b') insert into place(place_name) values('c') insert into place(place_name) values('d') insert into place(place_name) values('e') insert into place(place_name) values('f') insert into place(place_name) values('g')
使用触发器来维护
create trigger trig_place on place instead of insert as declare @place_id smallint, @place_name varchar(50), @min smallint select @min=min(identitycol) from place p1 where identitycol between ident_seed('place') and 32766 and not exists(select * from place p2 where p2.identitycol=p1.identitycol+ident_incr('place')) select @place_id=max(place_id) from place select @place_name=place_name from inserted if @place_id<>@min begin set @place_id=@min end if @place_id is null begin set @place_id=0; end set identity_insert place on insert into place(place_id,place_name) values(@place_id+1,@place_name) set identity_insert place off go
然后删除 place_id 为3,4,5的数据
当向表中再次插入数据时,将会从那些空缺开始插入,即先填补3,4,5。