表 table_students
编号  姓名
1     阿勒
2     悬空
3     哟跑
4     酥软
5     沃尔现在要实现这么一个功能
是删除的时候触发
当我删除编号为3的信息时
后面的编号会自动补上去 也就是后面的4变成3,5变成4删除后:
编号  姓名
1     阿勒
2     悬空
3     酥软
4     沃尔

解决方案 »

  1.   

    不推荐这种操作。如果你有 1千万数据,恰巧删除了记录2,后面所有的数据都要去update.这种设计并不符合规范。如果只是为了显示,不如在程序中控制,或者用row_number
      

  2.   

    CREATE TRIGGER TRI_TB ON TB
    AFTER DELETE 
    AS
    BEGIN
    UPDATE T1 SET [编号]=(
    SELECT COUNT(1) FROM TB T2 WHERE T2.[编号]<=T1.[编号]
    )
    FROM TB T1
    END
      

  3.   

    哦 很有道理 
    row_number
    可以讲解下么....
      

  4.   

    /*===============================================*/
    --> author:Ken Wong
    --> Date: 2009-12-21 11:14:22
    /*===============================================*/
    --> 测试数据:[tb]
    if object_id('[tb]') is not null drop table [tb]
    create table [tb]([编号] int,[姓名] varchar(4))
    insert [tb]
    select 1,'阿勒' union all
    select 2,'悬空' union all
    select 3,'哟跑' union all
    select 4,'酥软' union all
    select 5,'沃尔'--触发器
    create trigger changecode on [tb]
    for delete
    as
    begin
    update t set [编号] = (select count(1) from [tb] where [编号]  <= t.[编号] )
    from [tb] t
    where [编号] >= (select [编号] from deleted)
    end
    --删除
    delete [tb] where  [编号] = 3select * from [tb]
    ----------------------
    1 阿勒
    2 悬空
    3 酥软
    4 沃尔
      

  5.   

    就是在SELECT 的时候前边加上
    SELECT ROW_NUMBER() OVER (ORDER BY [编号] ASC)