2015-12-01 87 views
0

如何從數據庫表中獲取完全限定的名稱,該數據庫表的結構類似於樹?從樹結構中獲取FQN

基本上,我有一個像樹(名稱,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

這可能是使用光標不是一個錯誤的選擇,尤其是如果它真的NDepth。保持循環,從底部開始,直到不再有父母身份。我沒有足夠的關於你的數據庫結構的細節來開始編寫一個解決方案,但那就是我該怎麼做。或者,如果不是很多表和這個查詢會經常運行,那麼您可能只需創建一個映射表,該表中已經有名稱,可以通過子節點的ID進行檢索。 –

+0

@UnicornoMarley你喜歡什麼樣的細節?在這個例子中,有一個表,其中包含3個字段:NodeID,ParentID和Name。這就是創建NDepth結構所需的全部功能,以及每個節點的FQN? – MaxOvrdrv

回答

0

我最終跟蹤表中的FQN。使它更容易管理。我使用NodeID作爲關鍵字保留了NDepth父子關係,但也保留了FQN。