Tsql 如何将新记录插入到具有hierarchyid的表中
我正在学习如何使用hierarchyid处理分层数据。我读过一篇教程。演示数据由预先计算的层次结构组成。我熟悉在主键中使用标识(1,1)的父/子表。我明白我必须提供等级的价值。但我不知道该怎么做。对于没有父项的新记录和具有父项的新记录(假设我具有父项的hierarchyid),如何获取hierarchyid的值?非常感谢。正如Microsoft所说:“由应用程序生成和分配HierarchyId值,以使行之间所需的关系反映在值中。” HierarchyId总是有一个父级,顶部分支有一个根作为父级 以下是一些例子: 因此,要为新记录生成一个新的HierarchyId,您必须获取一个父(或根),使用Tsql 如何将新记录插入到具有hierarchyid的表中,tsql,hierarchyid,Tsql,Hierarchyid,我正在学习如何使用hierarchyid处理分层数据。我读过一篇教程。演示数据由预先计算的层次结构组成。我熟悉在主键中使用标识(1,1)的父/子表。我明白我必须提供等级的价值。但我不知道该怎么做。对于没有父项的新记录和具有父项的新记录(假设我具有父项的hierarchyid),如何获取hierarchyid的值?非常感谢。正如Microsoft所说:“由应用程序生成和分配HierarchyId值,以使行之间所需的关系反映在值中。” HierarchyId总是有一个父级,顶部分支有一个根作为父级
getgenerat
函数并指示要在哪个子级之后或两个子级之间添加它
declare @Parent hierarchyid = 0x; -- root
print @Parent.GetDescendant('/1/', '/2/').ToString() -- /1.1/
print @Parent.GetDescendant('/1/', '/1.1/').ToString() -- /1.0/
print @Parent.GetDescendant('/1/', '/1.0/').ToString() -- /1.-1/
print @Parent.GetDescendant('/1/', '/1.-1/').ToString() -- /1.-2/
print @Parent.GetDescendant('/1.1/', '/2/').ToString() -- /1.2/
print @Parent.GetDescendant('/1.2/', '/2/').ToString() -- /1.3/
print @Parent.GetDescendant('/1.3/', '/2/').ToString() -- /1.4/
print @Parent.GetDescendant('/1.3/', '/1.4/').ToString() -- /1.3.1/
print @Parent.GetDescendant('/1.2.3.4.5.6.7.8/', '/1.2.3.4.5.6.7.9/').ToString() -- /1.2.3.4.5.6.7.8.1/
-- by the way
declare @Hid hierarchyid = '/1.2.3.4.5.6.7.8.1/';
select @Hid; -- 0x63A08A49A85258
declare @Hid hierarchyid = '/-1.-2.-3.-4.-5.-6.-7.-8.-1234567890/';
select @Hid; -- 0x41F8F87A3C1D8E87216D9A81A73A
-- special cases with null
print @Parent.GetDescendant(null, null).ToString() -- /1/
print @Parent.GetDescendant('/1/', null).ToString() -- /2/
print @Parent.GetDescendant(null, '/1/').ToString() -- /0/