表中某个字段为int类型,id 为 1 2 3 ,然后设置了“标志规范” 为 是 。之后的记录中例如:删除某一条记录之后,新添加的记录的这个字段会是之后的一个数值,就是说id为3的那条记录删除了之后,再新添加的话,id就是4了。
想还是为3,如何解决啊?

解决方案 »

  1.   


    DBCC CHECKIDENT (tt,RESEED,3)
      

  2.   

    自增列做不到.
    可以在操作数据之前用个判断,把值放入变量.declare @i as int
    select @i = isnull(max(id),0) + 1 from tb
      

  3.   

    --自已做标识列的例子,不自动重排编号,而是自动补号:--创建得到最大id的函数
    IF NOT OBJECT_ID('[f_getid]') IS NULL
        DROP function f_getid
    GO
    create function f_getid()
    returns int
    as
    begin
    declare @id int
    if not exists(select 1 from tb where id='001')
        set @id=1
    else
    begin
        select @id=max(id) from tb
        if @id is null
            set @id=1
        else
        begin
            declare @id1 int
            select @id1=min(id) from tb a where id<>@id and not exists(select 1 from tb where id=a.id+1)
            if @id1 is not null set @id=@id1
            set @id=@id+1
        end
    end
    lb_re:
    return @id
    end
    go--创建表
    IF NOT OBJECT_ID('[tb]') IS NULL
        DROP TABLE tb
    GO
    create table tb(id int primary key default dbo.f_getid(),name varchar(10))
    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
    /*
    id          name
    ----------- ----------
    1           张三
    2           张四
    3           张五
    4           张六
    5           张七
    6           张八
    7           张九
    8           张十(8 行受影响)*/
    --删除部分记录
    delete from tb where name in('张三','张七','张八','张十')--显示删除后的结果
    select * from tb
    /*
    id          name
    ----------- ----------
    2           张四
    3           张五
    4           张六
    7           张九(4 行受影响)*/
    --再次插入记录
    insert into tb(name) values('李一')
    insert into tb(name) values('李二')--显示插入的结果
    select * from tb order by id
    /*
    id          name
    ----------- ----------
    1           李一
    2           张四
    3           张五
    4           张六
    5           李二
    7           张九(6 行受影响)
    */--删除环境
    drop table tb
    drop function f_getid本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/htl258/archive/2009/07/22/4369943.aspx
      

  4.   

    /*-------------------------*问题描述:表中采用了自增列删除记录会出现断号的情况,但是又想让它删除后自动重新编号?*采用函数+触发器的方法替代IDENTITY的功能,并且解决断号问题------------------------------------*/--创建实现自增列的函数create function f_getID()returns intasbeginreturn(select isnull(max(id),0)+1 from tb)endgo --创建表create table tb(id int primary key default dbo.f_getID() ,name varchar(20))go --创建触发器,在删除表中的记录时,自动更新记录的id,解决断号的烦恼create trigger t_s_duanhao on tbAFTER deleteasdeclare @mid intselect @mid=min(id)-1from deletedupdate tb set id=@mid,@mid=@mid+1where id>@mid+1go --插入记录测试(只能一条条记录插入)insert into tb(name) values('1哥')insert into tb(name) values('2哥')insert into tb(name) values('3哥')insert into tb(name) values('4哥')insert into tb(name) values('5哥')insert into tb(name) values('6哥')insert into tb(name) values('7哥')insert into tb(name) values('8哥') --显示插入的结果select * from tb --删除部分记录delete from tb where name in('1哥','4哥','7哥','8哥') --显示删除后的结果select * from tb /*--测试结果id          name----------- --------------------1           2哥2           3哥3           5哥4           6哥--*/--删除环境drop table tbdrop function f_getID