У меня есть две основные таблицы с именем Node
& Edge
и две таблицы кеша Route
& RouteNodes
.Схема выглядит следующим образом:
Мне нужно написать процедуру, которая выполняется при вставке узла и ребра, тогда каждый возможный маршрут с существующими узлами будетхранить в Route
и RouteNode
.
Я пробовал много решений, и одним из них является следующий запрос:
;WITH children AS
(
SELECT
FromNode,
CAST(ISNULL(convert(varchar,FromNode) + '->' ,'') + convert(varchar,ToNode) AS VARCHAR(4000)) AS Path
FROM Edge
WHERE FromNode = 1
UNION ALL
SELECT
t.FromNode,
list= CAST(ISNULL(convert(varchar,t.FromNode) + '->' ,'') + d.Path AS VARCHAR(4000))
FROM Edge t
INNER JOIN children AS d
ON (t.ToNode = d.FromNode)
)
SELECT *
from children
Но он дает только смежные узлы.Мои данные и результат:
Я ожидаю, что результат будет примерно таким:
1->3
1->3->2
1->3->2->5
1->3->2->5->6
.........
1->4
1->6
1->6->7
и так далее.Если это невозможно / астрономически, тогда я хочу ввести два узла и затем сохранить все возможные маршруты.