Sql 从树结构中获取FQN

Sql 从树结构中获取FQN,sql,Sql,如何从结构类似于树的数据库表中获取完全限定名 基本上,我有一个表,它的结构类似于树名、NodeID、ParentNodeID和其他属性,并且希望对所有节点、不同属性执行搜索。但是,我希望从找到匹配项的结果中返回完全限定名。从该FQN中,我可以突出显示UI树视图中找到的节点 我已经研究并找到了这个答案: 并试图通过将最终select语句更改为以下内容来修改它以使其采用该格式: SELECT A.NodeID , A.ParentID , A.Name , (RE

如何从结构类似于树的数据库表中获取完全限定名

基本上,我有一个表,它的结构类似于树名、NodeID、ParentNodeID和其他属性,并且希望对所有节点、不同属性执行搜索。但是,我希望从找到匹配项的结果中返回完全限定名。从该FQN中,我可以突出显示UI树视图中找到的节点

我已经研究并找到了这个答案:

并试图通过将最终select语句更改为以下内容来修改它以使其采用该格式:

SELECT A.NodeID , A.ParentID , A.Name , (REPLICATE( (SELECT Name FROM [TABLENAME] WHERE NodeID = A.ParentID) , HLevel ) + '.' + A.Name) AS TreeNode FROM CTECompany A ORDER BY OrderByField, A.Name; 但是,如果深度超过两个级别,则这不起作用。以下是一些示例结果:

Root.Container1 容器1容器1.1项目1 Root.Container2 容器2容器2.容器3 容器3容器3容器3.第三项


正如您所看到的,有些项目输出不正确。如果有人能帮我解决这个问题,那会有很大的帮助吗?我基本上想要第四个FQN提取。

我最终在表本身中跟踪FQN。使它更容易管理。我使用NodeID作为键保留了NDepth父子关系,但也保留了FQN。

这可能是使用游标不是一个坏选择的时候之一,特别是如果它确实是NDepth。继续循环,从底部开始,直到没有更多的父ID。我没有足够的关于数据库结构的详细信息来开始编写解决方案,但我会这样做。或者,如果没有太多的表,并且这个查询将非常频繁地运行,您可以创建一个映射表,其中已经有名称,可以通过子节点的ID检索。@UnicornoMarley您想要什么样的详细信息?对于本例,有1个表,其中包含3个字段:NodeID、ParentID和Name。这就是为每个节点创建NDepth结构和FQN所需的全部内容?