Ich bin eine Zeichenfolge für die Hierarchie eines Dokumenten-Management-System erstellen. Also, im Grunde der Ordner nach Ordner - bis hin zum Dokument.SQL zum Erstellen der Hierarchie Zeichenfolge - letzte Ebene fehlt
Zwei Probleme:
1. Die Datenbank listet alle der Ordner (und deren Eltern) in einer Tabelle, und alle Dokumente in einem anderen (und ihrem übergeordneten Ordner) 2. Abfrage ich verwende bisher fehlt die letzte Ordnerebene.
Ich verwende die folgende Abfrage:
select a.id_object, a.name, a.id_parent,
b.name as 'parent_name', b.id_parent as 'parent id'
into #a
FROM [folders] a left join [folders] b on b.id_object = a.id_parent
dann:
INSERT INTO Tree2([id_parent],[parent_name],[id_object],[object_name])
select id_parent, [parent_name],id_object, [name] from #a
dann die absoluten Top-Level zu finden und legen Sie einen /
:
UPDATE Tree2 SET Lineage='/', Depth=0 WHERE parent_name Is Null
UPDATE Tree2 SET Full_Lineage='/', Depth=0 WHERE parent_name Is Null
dann den rekursiven Teil :
WHILE EXISTS (SELECT * FROM Tree2 WHERE Depth Is Null)
UPDATE T SET T.depth = P.Depth + 1,
T.Lineage = P.Lineage + T.id_parent + '/' ,
FROM Tree2 AS T
INNER JOIN Tree2 AS P ON (T.id_parent=P.id_object)
WHERE P.Depth>=0
AND T.Depth Is Null
AND P.Lineage Is Not Null
Dies bringt dann meine Daten wie folgt aussehen:
Node id_parent id_object object_name depth lineage
100 f10101 f1010122 blah blah 5 F00/f0/f100/f1000/f10101
Kann jemand empfehlen, wie die letzte Ordner-Ebene am Ende der Linie zu schließen, als f1010122
der letzte Ordner in der Kette ist und nach wie vor muss in der lineage
Spalte enthalten sein? Und dann hatte ich auf der linken Seite eine Verknüpfung der Dokumente Tabelle, wo document_parent_id = id_object (f1010122)
.
Hope das macht Sinn. Ich verwende SQL Server 2014 Management Studio. Vielen Dank.
Thankyou @mendosi, erhalte ich Woher kommst du, bekomme aber eine "Typen stimmen nicht zwischen dem Anker und dem rekursiven Teil in der Spalte" Abstammung "der rekursiven Abfrage" rekursive_cte "" Fehlermeldung. haben es gegoogelt, aber scheinen nicht in der Lage zu sein, es zu lösen. Irgendwelche Ideen, und danke für Ihre Hilfe bis jetzt. – user3735855
@ user3735855 Wenn Sie 'Select @@ VERSION 'wählen, in welcher Version sind Sie angemeldet? 2014? – mendosi
@ user3735855 Es kann Ihnen helfen, die Definition von '[Ordner]' Tabelle in die Frage aufzunehmen. – mendosi