数据库中如何判断一个为INT的列是否存在断号,并且找出所断的号的数值

今天在做东西的时候需要用到一个int型字段是否为连续的,如果不连续的话则返回所缺少的编号的值否则返回最大的ID

下面是自己所测试的数据库的结构如下图所示:

数据库中如何判断一个为INT的列是否存在断号,并且找出所断的号的数值_第1张图片

方法一:使用函数进行操作,其主要函数体如下

 

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)

数据库中如何判断一个为INT的列是否存在断号,并且找出所断的号的数值_第2张图片

 

方法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;

 

执行结果如下:

数据库中如何判断一个为INT的列是否存在断号,并且找出所断的号的数值_第3张图片

此方法可以返回所有的缺省的ID的值,临时表如果没有断号的话我这里没有写返回最大值。这里只是作为参考希望大家多多支持。

你可能感兴趣的:(数据库中如何判断一个为INT的列是否存在断号,并且找出所断的号的数值)