有表格如下
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。
本文介绍了一个SQL触发器的设计方案,该触发器用于在删除部分数据后重新填充空缺的ID,确保新插入的数据能按照原有顺序进行填充。
1177

被折叠的 条评论
为什么被折叠?



