這樣處理:
建一自動遞增字段,如 create table t( id int identity(1,1),...)

解决方案 »

  1.   

    自動遞增字段會出現斷號的情況,可用以下方法解決:
    插入前:
    declare @max_id int
    select @max_id=max(id) 
    from t
    DBCC CHECKIDENT (t, RESEED, @max_id) --從@max_id開始遞增
    insert into t 
    ....
      

  2.   

    或者不用自動遞增字段,自己處理:declare @max_id int
    select @max_id=isnull(max(id) ,0)+1
    from tinsert into t (id,...)
    select @max_id,...
      

  3.   

    自增字段可以实现。
    但如果让修改此字段恐怕无法实现。
    还是用DELPHI生成一个做主关键字吧。例如:每插入一条数据,先从数据库读最大的主关键字,然后加1。这样就实现了自增。关于自减,也好办,例如有1,2,3,4,5条信息,现在想删除第3条,就设计一个触发器实现自减功能。create trigger tri_update
    on 表 for delete
    as
    update 表 set 表.主关键字=表.主关键字-1 from deleted where 表.主关键字>deleted.tt
    这样就可以实现自动减1的功能了。并刚才经过测试,测试完全可以通过
      

  4.   

    --自已做标识列的例子:--创建得到最大id的函数
    create function f_getid()
    returns int
    as
    begin
    declare @id int
    select @id=max(id) from tb
    set @id=isnull(@id,0)+1
    return(@id)
    end
    go--创建表
    create table tb(id int 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=@mid-1 from deleted
    update tb set id=@id,@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       
    ----------- ---------- 
    1           张三
    2           张四
    3           张五
    4           张六
    5           张七
    6           张八
    7           张九
    8           张十(所影响的行数为 8 行)id          name       
    ----------- ---------- 
    1           张三
    2           张四
    3           张六
    4           张九(所影响的行数为 4 行)
    --*/
      

  5.   

    ---建表测试
    create table aaa
    (
         tt    int primary key
    )------插入数据测试
    insert aaa values(1)
    insert aaa values(2)
    insert aaa values(3)
    insert aaa values(4)
    insert aaa values(5)-------创建触发器
    create trigger tri_update
    on aaa for delete
    as
    update aaa set aaa.tt=aaa.tt-1 
    from deleted where aaa.tt>deleted.tt------现在的数据为
    select * from aaa-----------
    1
    2
    3
    4
    5
    --------------------开始删除数据3delete aaa where tt=3------测试删除3条数据后的结果
    select * from aaa
    ------测试结果
    -----------
    1
    2
    3
    4
    -------------