读书人

求一句有点难度的sql语句,该怎么解决

发布时间: 2012-03-01 10:25:47 作者: rapoo

求一句有点难度的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

读书人网 >SQL Server

热点推荐