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
), който гарантирано съдържа повече от 1000 реда в CTE rnCTE
. -1 се добавя към ROW_NUMBER
стойностите да започват от 0, а не от 1.
Външната нула на заявката допълва числата за показване, като връща само тези, които не са в изходните данни и са по-малки от 1000.