Du kan bruge SQL 2005 CTE'er til at få SQL-motoren til at gøre det rekursivt.
En opremsning af grundlæggende tilgange er på http://blogs.msdn.com/anthonybloesch/archive/2006/02/15/Hierarchies-in-SQL-Server-2005.aspx
Celko har også en træer i SQL-bog, som dækker alt dette i n'te grad.
Eller du kan brute force det ved at vælge hvert niveau i en lokal tabelvariabel og derefter looping, indsætte børn med en markering, indtil dit @@ROWCOUNT er nul (dvs. du finder ikke flere børn). Hvis du ikke har mange data, er dette nemt at kode, men du antydede, at du leder efter ydeevne ved at sige, at du ikke vil have en markør.