表A有如下信息:ID NAME PAGEFILE
1  A     AA
2  A     AAA
3  A     AAAA
4  A     AAAAA
1  B     BB
2  B     BBB
3  B     BBBB
4  B     BBBBBID和NAME是联合主键。这个ID不是自增长的类型,是数据插入是,人为给自动按顺序编号。现在的问题是,比如我把第2条数据删除了,我希望表中的数据变成
ID NAME PAGEFILE
1  A     AA
2  A     AAAA
3  A     AAAAA
1  B     BB
2  B     BBB
3  B     BBBB
4  B     BBBBB
这个样子的。说白了,就是重新排上序号,但不允许使用临时表来实现。请高手指教。

解决方案 »

  1.   

    delete from tb where id =@num
    update tb set id=@num-1 where id>@num
      

  2.   


    --以此类推
    delete from 表A where ID=2 and name='A'
    update 表A set ID=ID-1 where name='A' and ID>2
      

  3.   

    1:不方便建聚集索引,建了重新排序很痛苦。
       的确,这个字段没有索引,ID的最大值是10
    2:没有任何特殊的含义
       的确,没有任何特殊意义,看这个字段的面相就知道了
    3:估计只是为了方便页面显示
       的确,是为了显示方便,前台是applet作图,想改前台,我这一个礼拜就啥都不用干了。
       要是不重新排序的话,页面的图就串位置了。总结,这个列还得要啊
      

  4.   

    可以写个触发器。
    给你个思路
    CREATE TRIGGER tri_name ON table_name 
    FOR delete
    as
    update   a   set   id   =  id-1 from   table_name  as   t   inner   join updated   as   u 
    on   t.id   >   u.id  and t.name=u.name
    GO
      

  5.   

    CREATE TRIGGER tri_name ON table_name 
    FOR delete
    as
    update   a   set   id   =  id-1 from   table_name  as   t   inner   join deleted   as   d
    on   t.id   >   d.id  and t.name=d.name
    GO
    这样才是删除
      

  6.   

    上面的应该没有问题吧,行级触发器吧。删除N个  哪怕不连续,反正执行的是比这个id大的减一,有多少条,就对比该条大的减一,应该没问题吧。
    比如删
    1 3
    第二条减一次     第四条会减两次吧也符合最后变成   1 2