实例表结构

CREATE TABLE [dbo].[Emp](
[ID] [int] IDENTITY(1,1),
[Name] [varchar](50),
[Org] [hierarchyid],
) INSERT INTO Emp(Name,Org) VALUES('吴xx','/')
INSERT INTO Emp(Name,Org) VALUES('谢xx','/1/')
INSERT INTO Emp(Name,Org) VALUES('赵xx','/2/')
INSERT INTO Emp(Name,Org) VALUES('卢xx','/1/1/')
INSERT INTO Emp(Name,Org) VALUES('方xx','/1/2/')
INSERT INTO Emp(Name,Org) VALUES('詹xx','/1/3/')
INSERT INTO Emp(Name,Org) VALUES('沈xx','/2/1/')

实例基础数据

SELECT *,Org.ToString(),Org.GetLevel()
FROM Emp

  

hierarchyid方法引用

ToString:节点路径

--node.ToString()
SELECT *,Org.ToString()
FROM Emp

GetLevel:节点深度

--node.GetLevel()
SELECT *,Org.GetLevel()
FROM Emp SELECT *,Org.GetLevel()
FROM Emp
WHERE Org.GetLevel() = 1

 

GetAncestor:节点N级祖先,即通过祖先节点反向获取指定级别的子节点。

--child.GetAncestor(n)
--指定节点的二级子节点
SELECT @CurrentNode = Org FROM Emp WHERE Name = '吴xx'
SELECT * FROM Emp WHERE Org.GetAncestor(2) = @CurrentNode

GetDescendant:节点子节点,大于child1且小于child2,child1/child2可为NULL。

--parent.GetDescendant(child1,child2)
--新增吴子节点,与谢/赵同级,但大于谢且小于赵。
DECLARE @Child1 hierarchyid
DECLARE @Child2 hierarchyid
SELECT @CurrentNode = Org FROM Emp WHERE Name = '吴xx'
SELECT @Child1 = Org FROM Emp WHERE Name = '谢xx'
SELECT @Child2 = Org FROM Emp WHERE Name = '赵xx'
INSERT INTO Emp(Name,Org) VALUES('于xx',@CurrentNode.GetDescendant(@Child1,@Child2))

IsDescendantOf:是否是节点的后代节点

--child.IsDescendantOf(parent)
--指定节点下的全部后代节点,包含本身
SELECT @CurrentNode = Org FROM Emp WHERE Name = '吴xx'
SELECT * FROM Emp WHERE Org.IsDescendantOf(@CurrentNode) = 1

GetReparentedValue:节点移动,节点路径从oldRoot指向newRoot

--node.GetReparentedValue(oldRoot,newRoot)
--于从指向吴子节点,更新指向赵子节点。
DECLARE @OldRoot hierarchyid
DECLARE @NewRoot hierarchyid
SELECT @CurrentNode = Org FROM Emp WHERE Name = '于xx'
SELECT @OldRoot = Org FROM Emp WHERE Name = '吴xx'
SELECT @NewRoot = Org FROM Emp WHERE Name = '赵xx'
UPDATE Emp SET Org=@CurrentNode.GetReparentedValue(@OldRoot,@NewRoot) WHERE Org = @CurrentNode

GetRoot:根节点

--hierarchyid::GetRoot()
SELECT *
FROM Emp
WHERE Org = hierarchyid::GetRoot()

Parse:从路径字符串转换为hierarchyid值,即编码。

--hierarchyid::Parse()
DECLARE @StringNode varchar(50)
SET @StringNode = '/1/1/'
SELECT *,Org.ToString() FROM Emp WHERE Org = hierarchyid::Parse(@StringNode)

Hierarchyid(层次结构)数据类型的更多相关文章

  1. SQL Server 2012新特性(1)T-SQL操作FileTable目录实例

    在SQL Server 2008提供FileStream,以借助Windows系统本身的API来强化SQL Server对于非结构化数据的支持后,SQL Server 2012更是推出了像Contai ...

  2. 【转】SQL Server sql_variant 类型的比较

    sql_variant 类型用于存储SQL SERVER中支持的各种数据类型. 为了进行 sql_variant 比较,SQL Server 数据类型层次结构顺序划分为多个数据类型系,sql_vari ...

  3. 文件迁移到FileTable中

    看此文档前,先参考一下文档 https://blog.csdn.net/downmoon/article/details/24374609 环境:阿里云ECS SQL Server 2017 + De ...

  4. TSql HierarchyID 数据类型用法

    HierarchyID 数据类型是一种长度可变的系统数据类型.可使用 HierarchyID 表示层次结构中的位置.类型为 HierarchyID 的列不会自动表示树,由应用程序来生成和分配 Hier ...

  5. SQL SERVER 2008 Hierarchyid数据类型

    以往我们在关系数据库中建立树状结构的时候,通常使用ID+ParentID来实现两条纪录间的父子关系.但这种方式只能标示其相对位置.解决这类问题在SqlServer2005出现之前通常是采用游标来操作, ...

  6. HierarchyID 数据类型用法

    树形层次结构(Hierarchy)经常出现在有结构的数据中,T-SQL新增数据类型HierarchyID, 其长度可变,用于存储层次结构中的路径.HierarchyID表示的层次结构是树形的,由应用程 ...

  7. SQL Server2008 Hierarchyid数据类型

    以往我们在关系数据库中建立树状结构的时候,通常使用ID+ParentID来实现两条 纪录间的父子关系.但这种方式只能标示其相对位置.解决这类问题在SqlServer2005出现之前通常是采用游标来操作 ...

  8. SQL SERVER 数据类型详解(SQL Server 2008)

    数据类型类别 SQL Server 中的数据类型归纳为下列类别: 数字类型 1.精确数字 2.近似数字 3.日期和时间 字符串类型 4.非Unicode字符串 4.Unicode字符串 5.二进制字符 ...

  9. Design3:数据层次结构建模之二

    SQL Server提供了一个新的数据类型 HierarchyID,用来处理层次结构的数据,这个数据类型是系统内置的CLR数据类型,不需要专门激活 SQL/CLR 功能即可使用.当需要表示各值之间的嵌 ...

随机推荐

  1. python之路 - 基础2

    1.导入模块 import 模块名 form 模块名 import 模块中的函数 可以将模块放入同级目录中,也可以将模块放入site-packages目录中 import sys print (sys ...

  2. (三)Python在windows上安装

    1.安装2.7--进入python官网(网址百度)下载python2.7 和python3.6(很小,2个程序后缀不一样?)2.安装到c:\python----next----advanced不动-- ...

  3. Netty 5.0源码分析之综述

    1. 前言 本系列主要是用于梳理Netty的架构流程,深入设计细节,重点关注Netty是如何实现它所声称的特性. (ps:本人水平有限,如有错误,请不吝指教 : )) 2. 什么是Netty Nett ...

  4. Linux学习-文件和目录管理 

    Linux文件和目录管理  文件系统架构  1.Linux文件系统具有层级性     1)文件或者目录起始于根目录"/"成为树状结构    2)最顶层由/开始   2 ...

  5. idea中建立maven web项卡在Generating Project in Batch mode

    Maven命令执行到Generating Project in Batch mode 卡住,原因是网络带宽不足问题!需要下载一个约5.1M的xml文件. Maven一般命令:mvn archetype ...

  6. visual studio 中将选中代码相同的代码的颜色设置,修改高亮颜色

    这是一个很实用的功能,默认的设置里不是很明显,设置完之后效果图如下: 具体设置方法是: 1. 菜单:工具  -> 选项  ->环境  ->字体和颜色 2. 在右边的 "显示 ...

  7. webservices(一)

    ---完全摘自网络 什么是webService WebService,顾名思义就是基于Web的服务.它使用Web(HTTP)方式,接收和响应外部系统的某种请求.从而实现远程调用.  1:从WebSer ...

  8. 仅以一个前端开发人员的角度看微信小程序

    看了几天的小程序(当然也包括了上手书写),才有了这篇博文,非技术贴,只是发表下个人观点,仅以个人技术能力来看小程序. 首先说下优点: 调试工具:官方的工具还是做了很多工作,包括监听文件变动自动刷新,编 ...

  9. js 数值格式化函数

    function ForDight(Dight,How){ ,How))/Math.pow(,How); return Dight; } //ForDight(Dight,How):数值格式化函数; ...

  10. centos安装ganttproject

    官网下载 http://www.ganttproject.biz/ 我的JAVA早已经安装了. 问题:root #ganttproject 提示org.bardsoftware.eclipsito.B ...