mysql hierarchyid_SQL Server 使用 Hierarchyid 操作层次结构数据

本文介绍了如何在 SQL Server 中利用 hierarchyid 数据类型处理层次结构数据,包括创建表、插入数据、查询祖先节点、子孙节点、指定层级节点、插入新节点、变更节点位置以及 hierarchyid 相关函数的使用。还讨论了层次数据的深度优先和广度优先索引策略。
摘要由CSDN通过智能技术生成

层次结构数据定义为一组通过层次结构关系互相关联的数据项。 在层次结构关系中,一个数据项是另一个项的父级或子级。

sql server2008开始内置的 hierarchyid 数据类型使存储和查询层次结构数据变得更为容易。hierarchyid 其实是 CLR 数据类型。

废话不多说,看不明白就实际操作一把,然后再回过头来理解。

下面先创建一个表,并插入一些数据:

48304ba5e6f9fe08f3fa1abda7d326ab.png

create table RoleMan

(

NodeId hierarchyid not null,

RoleId int not null,

RoleName nvarchar(32) not null,

Par_NodeId as NodeId.GetLevel() -- GetLevel()用于确定当前层次的深度(级别),最顶层(根节点)为0,然后依次加1。

)

go

insert into RoleMan(NodeId,RoleId,RoleName)

select '/1/','1','超级管理员' union

select '/1/1/','2','管理员A' union

select '/1/2/','3','管理员B' union

select '/1/1/1/','4','用户AA' union

select '/1/1/2/','5','用户AB' union

select '/1/2/1/','6','用户BA' union

select '/1/2/2/','7','用户BB'

go

select *,

NodeId.ToString() NodeId_Path -- 因为 hierarchyid 类型的值是以16进制表示的,这里把他转换为字符串

from RoleMan

48304ba5e6f9fe08f3fa1abda7d326ab.png

8662e71361d95a353333ec698c01ec6e.png

查询指定节点的祖先节点:

48304ba5e6f9fe08f3fa1abda7d326ab.png

-- 查询指定节点的祖先节点

declare @NodeId hierarchyid

select @NodeId=NodeId

from RoleMan

where RoleId=5

select *,NodeId.ToString() NodeId_Path

from RoleMan

where @NodeId.IsDescendantOf(NodeId)=1 -- IsDescendantOf(NodeId),判断指定节点是否是另一个节点的后代,如果是,则返回1

48304ba5e6f9fe08f3fa1abda7d326ab.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值