如何复制 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
声明。我会把它留给你。
我想复制一个子树,例如
进入同一个 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
声明。我会把它留给你。