存储两个节点之间的所有可能路由

时间:2018-12-13 15:22:40

标签: sql sql-server graph

我有两个名为NodeEdge的主表和两个缓存表RouteRouteNodes。 模式如下:

Schema

我必须编写一个过程,该过程将在插入节点和边缘时执行,然后与现有节点的所有可能路由都将存储在RouteRouteNode中。

我尝试了许多解决方案,其中一个是此查询:

;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

但是它只给出相邻的节点。 我的数据和结果是:

enter image description here enter image description here

我希望结果如下:

1->3
1->3->2
1->3->2->5
1->3->2->5->6
.........
1->4
1->6
1->6->7

,依此类推。 如果不可能/不是天文数字,那么我想输入两个节点,然后存储所有可能的路线。

0 个答案:

没有答案