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
EDIT
Kueri ini bekerja dengan menghasilkan daftar lengkap kemungkinan angka dari tabel sistem (master.dbo.spt_values
) yang dijamin berisi lebih dari 1000 baris di dalam rnCTE
CTE . -1 ditambahkan ke ROW_NUMBER
agar nilai dimulai dari 0 bukan 1.
Kueri luar nol mengisi angka untuk ditampilkan, hanya mengembalikan angka yang tidak ada dalam data sumber dan kurang dari 1000.