re 也是 int 型的,允许为空

解决方案 »

  1.   

    我觉得这样处理没有意义(所以只是想了一下有没有实现的可能和大致的算法,实际的东西不想写)a.首先是代价太大,效率极低,很容易堵塞其他进程,导致软件工作不正常
        这样删除一个的话,要把所有的子都更新一次,而这个子的编号一改,又会影响到编号比它大的,这样一连串的更新,相当就是把整个表的编号重新排一次
        如果是同时删除多个的话,还要用游标来逐个处理,这样就会把一个表更新几次
        如果还要考虑更新级联的表,维持它们之间的关系的话,这个更新的代价更大b.控制不好,容易出错,而且一出错可能会导致整个数据之间的关系混乱,所以整个处理必须全程用事务处理,这也很容易堵塞其他进程,导致死锁,最后是大家都做不了事c.与实际处理可能有出入,一般一个类别的编号定下来是多少,就是多少,这样才能体现历史数据的继承性,因为很多历史数据都是要备查的,你这样一改,历史数据全变了,如果有的是打印出来的,还会给以后查错带来麻烦
      

  2.   

    --查询缺少的最小id--示例数据
    declare @t table(id int)
    insert @t select 1
    union all select 2
    union all select 3--查询
    select min(id)+1 
    from(select id=0 union all select id from  @t) a
    where not exists(select * from @t where id=a.id+1)