从树结构

时间:2015-12-01 16:30:26

标签: sql

如何从树状结构的数据库表中获取完全限定名称?

基本上,我有一个像树一样的表(Name,NodeID,ParentNodeID,更多属性),并希望在不同属性的所有节点上执行搜索。但是,我希望从找到匹配项的结果返回的是完全限定名称。从那个FQN,我可以突出显示找到的UI(TreeView)中的节点。

我看了看并找到了答案:
http://maulikdhorajia.blogspot.ca/2012/06/sql-server-using-ctecommon-table.html

并尝试修改它以通过将最终的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
Container1Container1.Item1
Root.Container2
Container2Container2.Container3
Container3Container3Container3.ThirdTerm

正如您所看到的,有些物品没有正确出现。如果有人能帮我解决这个问题,那会有很大的帮助吗?我基本上想要NDepth FQN提取。

1 个答案:

答案 0 :(得分:0)

我最终跟踪了表格中的FQN。使管理更容易。我使用NodeID作为密钥保留了NDepth父子关系,但也保留了FQN。