Я строю строку для иерархии системы управления документами. Итак, в основном папка по разбивке по папкам - вплоть до документа.SQL для построения строки иерархии - последний уровень отсутствует
две проблемы:
1.The списки базы данных все из папок (и их родителей) в одной таблице, и все документы в другой (и их родителей) папку 2. запроса Я использую до сих пор пропускает окончательный уровень папки.
Я использую следующий запрос:
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
затем:
INSERT INTO Tree2([id_parent],[parent_name],[id_object],[object_name])
select id_parent, [parent_name],id_object, [name] from #a
затем, чтобы найти абсолютный верхний уровень и вставьте /
:
UPDATE Tree2 SET Lineage='/', Depth=0 WHERE parent_name Is Null
UPDATE Tree2 SET Full_Lineage='/', Depth=0 WHERE parent_name Is Null
Тогда рекурсивная часть :
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
Это тогда приносит свои данные, чтобы выглядеть следующим образом:
Node id_parent id_object object_name depth lineage
100 f10101 f1010122 blah blah 5 F00/f0/f100/f1000/f10101
Может кто-нибудь подскажет, как включить конечный уровень папок на конце линии, а f1010122
последняя папка в цепи и до сих пор необходимо включить в колонку lineage
? И тогда я намеревался на левом объединении таблицы документов, где document_parent_id = id_object (f1010122)
.
Надеюсь, что это имеет смысл. Я использую SQL Server 2014 Management Studio. Спасибо.
Thankyou @mendosi, я получаю откуда вы пришли, однако я получаю «Типы не совпадают между якорем и рекурсивной частью в столбце« lineage »рекурсивного запроса« recursive_cte »« сообщение об ошибке. имеют googled, но, похоже, не могут его решить. Любые идеи, и спасибо за вашу помощь до сих пор. – user3735855
@ user3735855 Если вы используете 'Select @@ VERSION', в какой версии вы работаете? 2014? – mendosi
@ user3735855 Это может помочь вам включить определение '[folders]' table в вопрос. – mendosi