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
BEARBEITEN
Diese Abfrage funktioniert durch Generieren der vollständigen Liste möglicher Nummern aus einer Systemtabelle (master.dbo.spt_values
), die garantiert mehr als 1000 Zeilen innerhalb des CTE rnCTE
enthält . -1 wird zu ROW_NUMBER
hinzugefügt um die Werte bei 0 statt bei 1 beginnen zu lassen.
Die äußere Abfrage füllt die Zahlen für die Anzeige mit Nullen auf und gibt nur diejenigen zurück, die nicht in den Quelldaten enthalten und kleiner als 1000 sind.