今天在做东西的时候需要用到一个int型字段是否为连续的,如果不连续的话则返回所缺少的编号的值否则返回最大的ID
下面是自己所测试的数据库的结构如下图所示:
方法一:使用函数进行操作,其主要函数体如下
Code
declare @i int
declare @maxValue int
declare @temp int
begin
set @maxValue = (select max(ID) from book)
set @i = 1
while(@i <= @maxValue)
begin
if not exists(select 1 from book where id = @i)
begin
set @temp = @i
break
end
else
begin
set @temp = (select max(ID) from book)+1
end
set @i=@i+1
end
end
select @temp
执行后的结果为:返回了上图所缺少ID为3的(如果要返回多个的话去掉 break)
方法2:使用临时表的操作
Code
create table #t(id int identity(1,1),ID2 int)
insert into #t select ID FROM BOOK
select * from #t where #t.id not in(select Book.ID from Book) order by id;
执行结果如下:
此方法可以返回所有的缺省的ID的值,临时表如果没有断号的话我这里没有写返回最大值。这里只是作为参考希望大家多多支持。