所以我面临一个棘手的问题,至少对我而言。
想象一下,我正在使用包含分支,区域等的不那么虚构的层次结构数据。我有一些代码消耗了存储过程中的数据,但最近出现了一个循环问题。< / p>
让您了解我的程序所消耗的数据:
Branch 12K3 Parent 12K
Branch 12K2 Parent 12K
Branch 12K Parent REGION AA123
....
我的工作是创建新节点并从上面的数据中分配适当的父节点。有点像下面。
CPX Node 1 Parent REGION AA456
CPX Node 2 Parent REGION SomeOtherRegion
CPX Node 3 Parent 12K2
CPX Node 4 Parent 12K
注意我有两个父节点恰好是分支的节点。这是不可取的。
目标:对于父级为分支的任何CPX节点,请向上遍历层次结构,直到找到恰好是区域的第一个节点。
所以在这种情况下我的节点应该是这样的
CPX Node 1 Parent REGION AA456
CPX Node 2 Parent REGION SomeOtherRegion
CPX Node 3 Parent AA123 -- previously 12K2
CPX Node 4 Parent AA123 -- previously 12K
我在2005年的整个递归CTE事情上都是新手,所以我天真地尝试过这个:
;with cte as
(
-- initialization -- don't worry, this just checks for a cycle condition
select t1.SourceID, t1.SourceParentID
from @someTable t1
inner join @someTable t2
on t1.SourceID = t2.SourceParentID
and t2.SourceID = t1.SourceParentID
union all
-- recursive execution
select p.SourceID, gp.SourceParentID
from cte p
inner join entities as gp with (nolock)
on gp.SourceID = p.SourceParentID
)
select * from cte
这会起作用,但递归永远不会终止。如果有比我更多经验的人能告诉我我做错了什么,我真的很感激!
输出我的SQL: