循环获取 table 中的下一个不可用号码

Loop to get next unavailable number in table

我想查询 table 以查看 Number 是否存在,如果存在,请检查 Number+ 1 并使用递归。我需要输出下一个不存在的更高值。

示例:

Table_A

**id - Number - Year**
**11 -  01    - 2021**
**12 -  02    - 2021**
**13 -  10    - 2021**
**18 -  11    - 2021**
**19 -  12    - 2021**

查询 checkNumber(11) 应该 return - 13

查询 checkNumber(13) 应该 return - 13

查询 checkNumber(1) 应该 return - 3

我如何为此创建递归 CTE,或者在 SQL 服务器中使用其他方法是否更好?

为此您不需要递归 CTE。相反,您只需要对相邻值的范围进行分组并选择第一个。

假设传入的number在table的取值范围内(题中所有例子都是如此),可以使用:

select top (1) max(number) + 1
from (select a.*, row_number() over (order by id) as seqnum
      from table_a a
     ) a
where number >= 1
group by (number - seqnum)
order by min(id);

Here 是一个 db<>fiddle.

我能够使用以下循环实现此目的:

declare @CurrentNumber int;
Set @CurrentNumber = // some initial value can be set based on requirement
WHILE ((Select 1 from Table_A where Number = @CurrentNumber and other conditions..)IS not null)
BEGIN
    SET @CurrentNumber = @CurrentNumber + 1;
END;
PRINT(@CurrentNumber);