Mr.Tです、こんにちは。
SQLで連番関連というのは色々とあるけども、今回考え付いたのは、以下の条件のときのSQL。
番号が800000~999999までの間から番号を一つ取得すること。
ただし、取得されていないうちで、一番小さいものから取得していくこと。
取得したら、取得済みテーブルに番号フィールドで保存済する。(番号フィールドはint)
なので、取得済みテーブルの登録状況が
【番号】
800000
800001
999999
みたいな取得状況というわけです。
次にとるのは800002ですね。
with BaseTmp as (
select [番号] as pNo
from [取得済みテーブル]
where [番号]>=800000
and [番号]<999999
)
,UpBaseTmp as (
select [番号]+1 as pNo
from [取得済みテーブル]
where [番号]>=800000
and [番号]<999999
union ALL
select 800000
)
select min(T1.pNo)
from UpBaseTmp T1
left join BaseTmp as T2
on T1.pNo = T2.pNo
where T2.pNo is null
こんな感じ。