È possibile utilizzare i CTE di SQL 2005 per fare in modo che il motore SQL lo esegua in modo ricorsivo.
Un'enumerazione degli approcci di base è disponibile in http://blogs.msdn.com/anthonybloesch/archive/2006/02/15/Hierarchies-in-SQL-Server-2005.aspx
Celko ha anche un libro sugli alberi in SQL che copre tutto questo all'ennesima potenza.
Oppure puoi forzarlo selezionando ogni livello in una variabile di tabella locale e quindi eseguendo il ciclo, inserendo i bambini con una selezione, fino a quando il tuo @@ROWCOUNT è zero (cioè, non trovi più bambini). Se non hai molti dati, questo è facile da codificare, ma hai accennato al fatto che stai cercando prestazioni dicendo che non vuoi un cursore.