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
REDIGER
Denne forespørgsel fungerer ved at generere den komplette liste over mulige tal fra en systemtabel (master.dbo.spt_values
) som med garanti indeholder mere end 1000 rækker inde i CTE rnCTE
. -1 er tilføjet til ROW_NUMBER
for at få værdierne til at starte ved 0 i stedet for 1.
Den ydre forespørgsel nul udfylder tallene til visning og returnerer kun dem, der ikke er i kildedataene og er mindre end 1000.