Für solche Aktionen habe ich mir eine kleine Hilfstabelle mit allen Zahlen von 1 bis gewünschtem Maximum erstellt (in diesem Fal von 1 - 999.999).

Per

Select MyNum from MyHelp H
where not exists (select * from MyTable T where H.MyNum = T.NumField)
fetch first row only

Das Risiko der Doppelbelegung bei Parallelausführung habe ich über Sperren verhindert.