比如我有一张表,id 不是自增长,是我指派 的id
id  name
1   张三
2   李四
3   王五
4   赵六
5   孙七
6   侯八如果我删除几条.变成
id  name
3   王五
6   侯八
那么我再插入数据时我想依次得到 1, 2, 4 ,5 或者反过来也可,就是缺哪个补哪个。
有高手一条sql语句能完成的吗?最好不要存储过程.

解决方案 »

  1.   

    为什么拒绝存储过程呢?这样的SQL语句写起来也够……
      

  2.   

    insert into tables(id,name) values((select min(id)-1 from tables),'李四')
      

  3.   

    思路:循环,找到一个已有数值之后,查找比它小的数值,直到有和循环值相等的时候,跳入下次循环。比较难写,建议你发到SQL版。
      

  4.   

    这个用存储程也够烦的吧。。谁能写??
    id的连续和间断有用吗?????
    如果你不想ID间断。那你为什么不在表中再加一个标志删除的字段isdel(=1标志删除)删除的时候isdel置1
    然后再实现你要的效果:
    用更新最前面的记录的内容来达到insert的目的。
    update tablename set name='张三' where id in (select top 1 id from tablename where isdel=1 order by id)
      

  5.   

    或者在表中增加以列表示记录的状态(删除与否)在删除的时候并不要把数据从表格中删除,而是修改记录的状态
    如:
    update tableA set SC = 1 where [id] = 1等要插入新数据的时候,可以根据记录的状态来选出删除的ID
    select id from tableA where SC = 0
    插入数据的时候使用Update而不是使用Insert
      

  6.   

    楼上几位的我都想过.我是用access.所以要考虑资源,做超市的数据库
    所以要讲求速度
      

  7.   

    select top 1 id=(id+1) from test where id+1 not in(select id from test) order by id asc
    这个ID就是你需要的值吧
      

  8.   

    忽略了ID 1 被删除的问题,下面这个可以解决:
    select top 1 case id when 1 then (select top 1 id=(id+1) from test where id+1 not in(select id from test) order by id asc) else 1 end from test a order by id asc