1

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

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

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

我的尝试看起来都像

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

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

提前致谢。

4

1 回答 1

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小提琴

于 2013-08-05T12:14:09.000 回答