Gibt es eine einfachere / effizientere Möglichkeit, diese Abfrage durchzuführen?

Ich habe einen Tisch, der die Beziehungen zwischen den Aufzeichnungen in einer Art "Eltern-Kind" -Mode zeigt. Ein [ID] -Feld identifiziert einen datasatz und ein [PARENT] -Feld identifiziert den datasatz des datasatzes durch [ID]. Dies schafft eine treestruktur für die oberste Eltern. Siehe folgende Tabelle als Beispiel:

[ID] [PARENT] [QUANTITY] 123 123 1 456 123 2 789 123 1 321 456 1 654 321 2 987 321 4 

Beachten Sie, wie der datasatz mit [ID] = '123' der oberste datasatz in diesem "tree" ist. Ich muss diese Tabelle abfragen, um alle treeknoten (komplette datasätze) unter dem obersten datasatz auszuwählen, zum Beispiel alle datasätze unter [ID] = '123' im tree (alle datasätze in der obigen Beispieltabelle). Derzeit verwende ich eine gespeicherte Prozedur, um die Kinder des datasatzes mit [ID] = '123' zu packen, dann kennt man Kinder usw. Ich weiß, dass es eine einfachere Abfrage geben muss (nicht eine gespeicherte Proc), die sich dynamisch anpassen könnte diese Situation bin ich einfach nicht sicher, wie das ohne Looping funktionieren könnte, um sicherzustellen, dass alle Kinder empfangen werden. Jeder Rat wird geschätzt.

Verwenden Sie "WITH" Gemeinsamer Tabellenausdruck – sehr empfehlenswert auf Hierarichal-Abfrage.

http://msdn.microsoft.com/en-us/library/ms190766(v=sql.105).aspx