求一句有点难度的sql语句
我有个字段是 int型 是主见 不能用自增长 是通过数据比较确定值的
我的问题是
如果 我有100条记录 字段值是1-100 如果我删除了其中一条记录 没有其他地方记录删除的id信息 我想重复使用被删除的那条记录的id怎么做。
比如 我删除了第2条记录id值是2 我在增加新记录时 想找出1-100中已经没有被占用的数 就是刚才删除的数“2” ,怎么找一个范围内没有数。
不用循环比较方法 数据多了那就太慢了
大家有什么思路没 讨论下
------解决方案--------------------最好的办法是每次删除后将此id纪录下来,下次使用时从此表中调用
------解决方案--------------------找出第一个缺号
select top 1 a.id+1 as id
from tablename a left join tablename b
on b.id=a.id+1
where b.id is null
------解决方案--------------------找出第一个缺号
select top 1 a.id+1 as id
from tablename a left join tablename b
on b.id=a.id+1
where b.id is null
--有bug
假如删除是1,就不对啦
------解决方案----------------------用循环,数据量比较大的话会很麻烦,还是把所删除的Id记录下来,保存到另外一张表里面比较好点
declare @tb table(id int)
declare @i int
set @i=1
while @i <=100
begin
if not exists( select * from # where id1=@i)
insert into @tb select @i
set @i=@i+1
end
select * from @tb
------解决方案--------------------ojuju10(longdchuanren) ( ) 信誉:100 Blog 加为好友 2007-5-15 9:28:19 得分: 0
找出第一个缺号
select top 1 a.id+1 as id
from tablename a left join tablename b
on b.id=a.id+1
where b.id is null
--有bug
假如删除是1,就不对啦
-----------------------------------
确实有bug
这么改下吧
select top 1 a.id+1 as id
from (seelct id from tablename union all seelct 0 ) a left join tablename b
on b.id=a.id+1
where b.id is null
------解决方案--------------------改
select top 1 a.id+1 as id
from (select id from tablename union all select 0 ) a left join tablename b
on b.id=a.id+1
where b.id is null
------解决方案--------------------循环不一定慢,关键看算法
声明一个变量@a 等于1到100的累加
select @a - sum(id) from T