Можете да използвате SQL 2005 CTE, за да накарате SQL машината да го прави рекурсивно.
Изброяване на основните подходи е на http://blogs.msdn.com/anthonybloesch/archive/2006/02/15/Hierarchies-in-SQL-Server-2005.aspx
Celko също има книга за дървета в SQL, която обхваща всичко това до n-та степен.
Или можете да го принудите грубо, като изберете всяко ниво в променлива на локална таблица и след това зациклите, вмъквайки деца с избрано, докато вашият @@ROWCOUNT стане нула (т.е. не намирате повече деца). Ако нямате много данни, това е лесно за кодиране, но вие намекнахте, че търсите производителност, като казахте, че не искате курсор.