使用SQL hierarchyId获取给定节点的Parent节点

时间:2013-03-20 10:14:20

标签: sql-server hierarchy

我有一个表作为CorporateStructure,如下所示:

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

我有ID 4,我想找到父母,我该怎么做?

此致 维沙尔

1 个答案:

答案 0 :(得分: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演示