Puede utilizar CTE de SQL 2005 para que el motor de SQL lo haga de forma recursiva.
Una enumeración de enfoques básicos se encuentra en http://blogs.msdn.com/anthonybloesch/archive/2006/02/15/Jerarchies-in-SQL-Server-2005.aspx
Celko también tiene un libro de árboles en SQL que cubre todo esto hasta el enésimo grado.
O puede usar la fuerza bruta seleccionando cada nivel en una variable de tabla local y luego haciendo un bucle, insertando niños con una selección, hasta que su @@ROWCOUNT sea cero (es decir, no está encontrando más niños). Si no tiene muchos datos, esto es fácil de codificar, pero insinuó que está buscando rendimiento al decir que no quiere un cursor.