创建sql hierarchyid兄弟姐妹

时间:2013-08-05 11:36:43

标签: sql-server tsql hierarchy hierarchical-data

我有一个数据库表,我刚刚添加了一个层次结构列。唯一的其他相关列是ID列(主键)。 ID = 1的条目是我的根(设置为HierarchyID :: GetRoot())。我可以在层次结构中创建一个孩子,但是我似乎无法找到一种方法来迭代我现有的数据,以使所有剩余的条目成为根的子项。我的所有尝试都以所有其他具有相同层次结构值的行结束。

IE - 层次结构应如下所示:

ID | Hierarchy
-------------
1  | /
2  | /1
3  | /2
etc

我的尝试看起来都像

ID | Hierarchy
-------------
1  | /
2  | /1
3  | /1
etc

我可以使用某种形式的简单更新语句或游标循环来填充我的表格吗? 更好的是有一种方法来填充它,以便Hierarchy.ToString()使#in /#等于ID? (这很好,但远非需要。

提前致谢。

1 个答案:

答案 0 :(得分:1)

您可以使用ID构建一个字符串,并将其用作hierarchyid::Parse的参数

update T
set Hierarchy = case when ID = 1 
                  then hierarchyid::GetRoot() 
                  else hierarchyid::Parse('/'+cast(ID as varchar(10))+'/') 
                end

SQL Fiddle