Ich habe eine Tabelle, die Ordner Pfade enthält. Diese Tabelle enthält vier Spalten: DirID
, BaseDirID
, DirLevel
und DisplayPath
. DirID
- Die ID des Ordners. BaseDirID
- Die ID des ersten Ordners in der Hierarchie. Daher teilen sich alle Ordner (Pfade) derselben Hierarchie denselben Wert in dieser Spalte. DirLevel
- Die Tiefe des Ordners. DisplayPath
- Der Pfad des Ordners.SQL: Finden Sie fehlende Ordner Pfade in Aufspaltung von Hierarchien
Ich muss alle "Lücken" zwischen diesen Ordnern in der Hierarchie finden.
Beispieldaten zum Beispiel:
DirID BaseDirID DirLevel DisplayPath
1 1 1 'A'
2 1 3 'A\B\C'
3 1 5 'A\B\C\D\E'
4 1 3 'A\B\F'
5 1 5 'A\B\F\G\H'
6 2 1 'U'
7 2 3 'U\V\W'
8 2 5 'U\V\W\X\Y'
9 2 3 'U\V\M'
10 2 5 'U\V\M\L\O'
Also brauchen wir folgende Daten zu finden:
BaseDirID DisplayPath
1 'A\B'
1 'A\B\C\D'
1 'A\B\F\G'
2 'U\V'
2 'U\V\W\X'
2 'U\V\M\L'
Kommentare:
ein. Diese Tabelle enthält mehr als 250.000 Datensätze von Ordnern, , also suchen wir nach dem effizientesten Weg, dies zu tun, sonst wird das Skript für lange Zeit stecken bleiben, Zeit, die wir nicht haben.
b. Ich habe keine Liste aller Ordner. Was ich habe, sind die "root" -Ordner und die "leafs" -Ordner, die ich brauche, um die "Lücken" zwischen ihnen in der Hierarchie zu finden.
c. Die Tabelle kann mehr als eine Hierarchie enthalten und wir müssen die "Lücken" in allen Hierarchien finden.
d. Jede der Hierarchien kann sich teilen. Wie Sie in den Beispieldaten sehen können, teilt sich die erste Hierarchie in zwei Ordnerpfade aus dem Ordner "A \ B": "A \ B \ C" und "A \ B \ F". Und die zweite Hierarchie teilt sich in zwei Ordnerpfade vom Ordner 'U \ V': 'U \ V \ W' und 'U \ V \ M'. Und wir müssen alle "Lücken" auch in solchen Fällen finden, wenn sich die Hierarchien aufteilen.
e. Die SQL Server-Version lautet: SQL 2012 SP3.
Diese Frage ist eine Fortsetzungsfrage für die Frage, die im folgenden Link gestellt wurde: SQL: Find missing hierarchy Folders (Paths) in a table Unsere Frage enthält auch den vierten Kommentar, der in Fettdruck erscheint.
Ich habe gesehen, dass es eine neue Spalte Typ namens "hierarchyid" (Start von SQL Server 2008), die ich dachte, dass könnte uns helfen - https://docs.microsoft.com/en-us/sql/t-sql/data-types/hierarchyid-data-type-method-reference Was denkst du?
Vielen Dank im Voraus.
Echtordnernamen unterschiedlich sind oder es sein wird, A \ B ...? –
Die Ordner-Namen können wie alles sein: Kannan Kannan \ Kandasamy Kannan \ Kandasamy \ Nuriel Kannan \ Kandasamy \ Nuriel \ Zrubavely –