我有两个名为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
,依此类推。 如果不可能/不是天文数字,那么我想输入两个节点,然后存储所有可能的路线。