Vous pouvez utiliser les CTE SQL 2005 pour que le moteur SQL le fasse de manière récursive.
Une énumération des approches de base se trouve à http://blogs.msdn.com/anthonybloesch/archive/2006/02/15/Hierarchies-in-SQL-Server-2005.aspx
Celko a également un livre sur les arbres dans SQL qui couvre tout cela au nième degré.
Ou vous pouvez le forcer brutalement en sélectionnant chaque niveau dans une variable de table locale, puis en boucle, en insérant des enfants avec une sélection, jusqu'à ce que votre @@ROWCOUNT soit égal à zéro (c'est-à-dire que vous ne trouvez plus d'enfants). Si vous n'avez pas beaucoup de données, c'est facile à coder, mais vous avez laissé entendre que vous recherchiez des performances en disant que vous ne vouliez pas de curseur.