做一个temp表把删除数据的ID记录进去在下一次插入的时候先检查,这张temp表里是不是有记录如果有记录,提取出ID来再插入目的表中这样就可以补足空缺了

解决方案 »

  1.   

    --自已做标识列的例子:--创建得到最大id的函数
    create function f_getid()
    returns char(5)
    as
    begin
    return((select right(100001+isnull(max(id),0),5) from tb))
    end
    go--创建表
    create table tb(id char(5) default dbo.f_getid() primary key,name varchar(10))
    go--创建触发器,在删除表中的记录时,自动更新记录的id(**如果不要此功能,则删除此触发器)
    create trigger t_delete on tb
    AFTER delete
    as
    declare @id int,@mid int
    select @mid=min(id),@id=99999+@mid from deleted
    update tb set id=right(@id,5),@id=@id+1 where id>@mid
    go--插入记录测试
    insert into tb(name) values('张三')
    insert into tb(name) values('张四')
    insert into tb(name) values('张五')
    insert into tb(name) values('张六')
    insert into tb(name) values('张七')
    insert into tb(name) values('张八')
    insert into tb(name) values('张九')
    insert into tb(name) values('张十')--显示插入的结果
    select * from tb--删除部分记录
    delete from tb where name in('张五','张七','张八','张十')--显示删除后的结果
    select * from tb--删除环境
    drop table tb
    drop function f_getid/*--测试结果
    id    name       
    ----- ---------- 
    00001 张三
    00002 张四
    00003 张五
    00004 张六
    00005 张七
    00006 张八
    00007 张九
    00008 张十(所影响的行数为 8 行)
    id    name       
    ----- ---------- 
    00001 张三
    00002 张四
    00003 张六
    00004 张九(所影响的行数为 4 行)
    --*/