DECLARE @t TABLE (VALUE CHAR(3)) INSERT @t VALUES ('000'),('002'),('005'),('190') ;WITH rnCTE AS ( SELECT -1 + ROW_NUMBER() OVER (ORDER BY TYPE, number, name) AS rn FROM master.dbo.spt_values ) SELECT RIGHT('000' + CAST( rn AS VARCHAR(11)),3) FROM rnCTE WHERE NOT EXISTS ( SELECT 1 FROM @t WHERE VALUE = rn ) AND rn < 1000
プレ>編集
このクエリは、システム テーブル (
master.dbo.spt_values
) から可能な数値の完全なリストを生成することによって機能します。 ) CTErnCTE
内に 1000 行を超える行が含まれていることが保証されています . -1 がROW_NUMBER
に追加されます 値を 1 ではなく 0 から開始します。外側のクエリは、表示のために数値をゼロで埋め、ソース データになく、1000 未満の数値のみを返します。