Ich habe eine kommerzielle Anwendung mit einer SQL Server 2008 R2-Datenbank, die eine Tabelle enthält, die eine Datei- und Ordnerstruktur modellieren soll, ähnlich < root>: < Unterebene 1 >: < Unterebene 2> .. < Unterebene>: < Dokument>. Die Datenbanktabelle enthält Wertepaare (folder_item, übergeordnetes Element), wobei folder-item entweder ein Dokument oder ein Ordner ist und parent ein Link zu einer anderen Zeile in der Tabelle ist.SQL Server rekursive hierarchische Abfrage, weniger als optimale Datenstruktur
Ich versuche, eine Abfrage zu schreiben, die zwei Werte pro Zeile zurückgibt:
- ein Dokument
- Der vollständige verketteten Pfad zu dem Dokument, von der obersten Ebene Ordner in den unmittelbaren Behälter des Dokuments, zum Beispiel Wurzel: Level1: Level2 ..: LevelN.
Normalerweise sollte eine rekursive Abfrage der Lage sein, diese Situation zu bewältigen, aber es ist eine Komplikation. Die Ordnerelementtabelle enthält redundante Einträge für jedes Dokument und jede Unterebene, die mit jedem Vorgänger in der Ordnerstruktur und nicht nur mit dem unmittelbaren übergeordneten Element verknüpft werden.
Statt (Dokument, parent) (parent, Großeltern) (Großeltern, Urgroßelternteil) ... (Vorfahre, root)
Die Tabelle enthält (Dokument, parent) (Dokument, Großeltern eltern~~POS=HEADCOMP) ... (Dokument, Vorfahr) (Dokument, root) (parent, Großeltern eltern~~POS=HEADCOMP) ... (parent, Vorfahr) (parent, root) ... (Großelternteil, Urgroßelternteil) ... (Großeltern, Wurzel)
und so weiter. Ich bin sicher, dass die Datenmodellierer ihre Gründe für das Design hatten, aber es negiert die Verwendung einer standardmäßigen rekursiven hierarchischen Abfrage. In der Tat, als ich es versuchte, überschritt die Ausführung die maximale Anzahl von Rekursionsstufen.
Hat jemand anderes ein ähnliches Problem festgestellt, und kann es gelöst werden, ohne auf komplexe Programmierung jenseits der SQL-Standardfunktionen zurückgreifen zu müssen?
Dank viel
Patrick
Wie wäre es, einige Tabellenstrukturen und Beispieldaten zu veröffentlichen? Wenn Sie Ihre Rekursion nur auf den Namen stützen, kämpfen Sie wahrscheinlich einen verlorenen Kampf. –
Die Rekursion basiert auf einem eindeutigen, aber nicht PK-VARCHAR-Wert "DOCNUMBER", wobei die Spalte PARENT die DOCNUMBER der Vorgängerzeile enthält. –
Glücklicherweise stellt sich heraus, dass eine Entscheidung getroffen wurde, die bestehende Ordnerhierarchie zu ignorieren, und das Problem ist dank einer (weisen) geschäftlichen Entscheidung ausnahmsweise verschwunden. Danke an Sean und Tab für die Antwort. –