2013-03-20 89 views
1

我有一個表作爲CorporateStructure與下面的數據如下:獲取使用SQL給定節點的父節點HIERARCHYID

╔════╦════════╦═════════════╗ 
║ Id ║ Name ║ HierarchyId ║ 
╠════╬════════╬═════════════╣ 
║ 1 ║ john ║/   ║ 
║ 2 ║ smith ║ /1   ║ 
║ 3 ║ John2 ║ /1/1/  ║ 
║ 4 ║ Collin ║ /1/1/1  ║ 
╚════╩════════╩═════════════╝ 

標識我有ID 4,我想尋父我該怎麼辦呢?

問候 維沙爾

+1

「/ 1/1/1」是否是'HierarchyId'中的字面值? – 2013-03-20 10:24:56

回答

3

正如邁克爾指出史密斯(/1)和科林(/1/1/1)的字面意義似乎並沒有一個有效的HierarchyId

糾正這些值,您可以獲取父使用GetAncestor

試試這個節點: -

Select * from YourTable 
where [HierarchyId] in (
      Select [HierarchyId].GetAncestor([HierarchyId].GetLevel()-1).ToString() 
      from YourTable 
      where id=4 
      ) 

SQL FIDDLE演示

+1

請注意,您的GetAncestor調用將獲得根節點,而不是該節點的直接父節點。 GetAncestor的參數是n,其中n代表層次結構上的層數。要獲得直接父級,只需執行GetAncestor(1)。 – Anssssss 2015-12-10 16:10:51

相關問題