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
EDITAR
Esta consulta funciona gerando a lista completa de números possíveis de uma tabela do sistema (
master.dbo.spt_values
) que contém mais de 1.000 linhas dentro do CTE rnCTE
. -1 é adicionado a ROW_NUMBER
para que os valores comecem em 0 em vez de 1. A consulta externa zera os números para exibição, retornando apenas aqueles que não estão nos dados de origem e são inferiores a 1000.