2013-03-20 90 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

相关问题