sql-server - 如何复制hierarchyid子树
问题描述
我想复制一个子树,例如
进入同一张表,在下一个最右边的空闲位置(在本例中为 /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;
前两个语句只是设置(顺便说一句,如果您自己提供,这将使您在此处提出的未来问题更有可能得到回答!)。最后一位显示将子树移动到新的父级。
为了避免硬编码/5/
,我想出了这个(基于与上面相同的设置):
declare @root hierarchyid = '/';
select @root.GetDescendant(
max(h).GetAncestor(
max(h).GetLevel()-1),
NULL
).ToString()
from @foo;
这是一个明智的猜测,因为我不知道您的实际数据。但这应该会让你走得很远。
最后,要实际更改您的数据以反映我选择的值,您必须运行一个update
语句。我会把它留给你。
推荐阅读
- angular - Angular 7 ng-pick-datetime 与 ngModel 错误的语言环境
- java - java.net.UnknownHostException:<
> : 未知错误 - javascript - this.getField 值分布
- r - 在某些条件下使用列中先前值的矢量化解决方案
- javascript - 没有从 NodeJS 中的 Promise 和函数返回一些东西
- python - 如何在另一个图像(RGB,没有 Alpha 通道)上合成具有 Alpha 通道的图像?使用 python PIL
- sql - 如何在 SQL Server 中将行值显示为列值
- javascript - 在javascript中选择时如何替换文本
- react-native - 如何在 react-native-awesome-alerts 中的警报消息中插入换行符
- vb.net - 按列搜索 dgv ("TagIndex = 5")