如何复制 hierarchyid 子树

How to to copy hierarchyid subtree

我想复制一个子树,例如

进入同一个 table,在下一个最右边的空闲位置(在本例中为 /5/...)。

是否有任何存储过程可以帮助我做到这一点?如果没有:我该怎么做?

我是 SQL 的新手,因此我们将不胜感激。

这些值看起来像 hierarchyid 值,这使得这相当容易。这是我想出的:

declare @foo table (
    h hierarchyid
);

insert into @foo (h)
values
    ('/4/1/'),
    ('/4/1/1/'),
    ('/4/1/1/6/'),
    ('/4/1/1/7/');

select h.ToString(), 
    h.GetReparentedValue('/4/', '/5/').ToString()
from @foo;

前两个语句只是设置(顺便说一句,如果您自己提供,这将使您以后在这里提出的问题更有可能得到解答!)。最后一位显示将子树移动到新的父树。

为了避免 hard-code /5/,我想到了这个(基于与上面相同的设置):

declare @root hierarchyid = '/';
select @root.GetDescendant(
        max(h).GetAncestor(
            max(h).GetLevel()-1),
            NULL
        ).ToString()
from @foo;

这是一个有根据的猜测,因为我不知道你的实际数据。但这应该会让你有很长的路要走。

最后,要实际 更改 您的数据以反映我选择的值,您必须 运行 一个 update 声明。我会把它留给你。