HierarchyID 数据类型是一种长度可变的系统数据类型。可使用 HierarchyID 表示层次结构中的位置。类型为 HierarchyID 的列不会自动表示树,由应用程序来生成和分配 HierarchyID 值,使行与行之间的所需关系反映在这些值中。
1,字符串表示
必须以“/”开头,以“/”结尾,“/”之间使用正整数标识某一个元素,例如“/”,“/1/2/”,“/1/2/3/”
2,数据类型的转换
declare @sa Nvarchar(100) declare @ha HierarchyID declare @hb HierarchyID set @sa=‘/1/2/3/‘ set @ha=HierarchyID::Parse(@sa) set @hb=0x5B5E select @sa as sa,@ha as ha,@hb.ToString() as hb
3,按深度优先顺序进行比较
给定两个 hierarchyid 值 a 和 b,a<b 表示在对树进行深度优先遍历时,先找到 a,后找到 b。hierarchyid 数据类型的索引按深度优先顺序排序,在深度优先遍历中相邻的节点的存储位置也相邻。同Level的节点,左边节点小于右边节点,表示左边先被遍历到。
declare @sa Nvarchar(100) declare @sb Nvarchar(100) declare @ha HierarchyID declare @hb HierarchyID set @sa=‘/1/2/3/‘ set @sb=‘/1/2/‘ set @ha=HierarchyID::Parse(@sa) set @hb=HierarchyID::Parse(@sb) if @ha>=@hb print @sa+‘>=‘+@sb else print @sa+‘<‘+@sb
4,调用GetLevel()查看HierarchyID的Level,值是从root节点开始的层数。
declare @sa Nvarchar(100) declare @ha HierarchyID set @sa=‘/1/2/3/‘ set @ha=HierarchyID::Parse(@sa) select @sa as sa,@ha as ha,@ha.GetLevel() as Level
5,静态方法GetRoot(),静态方法的调用格式:HierarchyID::GetRoot()
select HierarchyID::GetRoot().ToString() as TootString,HierarchyID::GetRoot() as RootHierarchyID
6,GetDescendant(childleft,childright)用以返回父级的一个子节点,返回的子节点和child是同level的。
declare @sa Nvarchar(100) declare @sb Nvarchar(100) declare @sr Nvarchar(100) declare @ha HierarchyID declare @hb HierarchyID declare @hr HierarchyID set @sa=‘/1/2/3/‘ set @sb=‘/1/2/6/‘ set @sr=‘/1/2/‘ set @ha=HierarchyID::Parse(@sa) set @hb=HierarchyID::Parse(@sb) set @hr=HierarchyID::Parse(@sr) select @hr.GetDescendant(null,null).ToString(), @hr.GetDescendant(@ha,null).ToString(), @hr.GetDescendant(@ha,@hb).ToString()
7,判断是否是节点的后代,child.IsDescendantOf(parent),如果是,返回1,如果不是,返回0
declare @sa Nvarchar(100) declare @sb Nvarchar(100) declare @sr Nvarchar(100) declare @ha HierarchyID declare @hb HierarchyID declare @hr HierarchyID set @sa=‘/1/2/3/‘ set @sb=‘/1/2/6/‘ set @sr=‘/1/2/‘ set @ha=HierarchyID::Parse(@sa) set @hb=HierarchyID::Parse(@sb) set @hr=HierarchyID::Parse(@sr) select @ha.IsDescendantOf(@hr), @hb.IsDescendantOf(@hr), @ha.IsDescendantOf(@hb)
时间: 2024-10-07 08:16:33