TSql HierarchyID 数据类型用法

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

TSql HierarchyID 数据类型用法的相关文章

TSql HierarchyID 数据类型用法(sqlserver2008以上有此数据类型)

TSql HierarchyID 数据类型用法 2017年04月25日 09:47:46 阅读数:110 HierarchyID 数据类型是一种长度可变的系统数据类型.可使用 HierarchyID 表示层次结构中的位置.类型为 HierarchyID 的列不会自动表示树,由应用程序来生成和分配 HierarchyID 值,使行与行之间的所需关系反映在这些值中. 1,字符串表示 必须以"/"开头,以"/"结尾,"/"之间使用数值标识某一个元素,一

T-SQL函数及用法--转

转自http://www.cnblogs.com/qixuejia/archive/2010/07/14/1777105.html 1. 聚合函数 (1) AVG 函数功能返回组中值的平均值.空值将被忽略 语法AVG ( [ ALL | DISTINCT ] expression ) (2) MAX 函数功能返回表达式的最大值 语法MAX ( [ ALL | DISTINCT ] expression ) (3) MIN 函数功能返回表达式的最小值 语法MIN ( [ ALL | DISTINC

JAVA自定义数据类型用法

一,自定义数据类型的概念:    我们就拿一部手机进行分析,它能用来做什么呢?它可以打电话,上网,聊微信等,这些就是 手机所提供的功能,也就是方法:手机也有它的特征,如颜色.尺寸大小.品牌型号等,这些    就 是手机的特征,也就是属性. 二,自定义数据类型的定义方法:    pubilc class 类名    {        数据类型 属性名;        数据类型 属性名;    } 注意:创建的java文件博需和类型相同. 三,自定义数据类型的使用 创建方法     数据类型 变量名

T-SQL Apply的用法

SQL Server 2005 新增 cross apply 和 outer apply 联接语句,增加这两个东东有啥作用呢? 我们知道有个 SQL Server 2000 中有个 cross join 是用于交叉联接的.实际上增加 cross apply 和 outer apply 是用于交叉联接表值函数(返回表结果集的函数)的, 更重要的是这个函数的参数是另一个表中的字段.这个解释可能有些含混不请,请看下面的例子: -- 1. cross join 联接两个表 select * from T

sQLserver T-SQL 事务的用法

原文在: https://www.lesg.cn/netdaima/2016-55.html 在使用Mssql的时候经常需要用到存储过程 有些操作在前面发生错误的时候:需要回滚:这就需要事务了: 下面是代码: BEGIN TRANSACTION--开始事务 DECLARE @errorSun int=0 --定义错误计数器 DECLARE @ErrorMessage NVARCHAR(4000)=''; --DECLARE @Remark NVARCHAR(4000)='';--备注 BEGIN

TSql bulk insert 用法

语法,参见 MSDN URL:https://msdn.microsoft.com/zh-cn/library/ms188365.aspx BULK INSERT [ database_name . [ schema_name ] . | schema_name . ] [ table_name | view_name ] FROM 'data_file' [ WITH ( [ [ , ] BATCHSIZE = batch_size ]    --BATCHSIZE指令来设置在单个事务中可以插

锋利的SQL2014:层次结构操作之Hierarchyid

在8.6.4节介绍了使用递归CTE查询层次结构数据的方法,本节将介绍一种使用hierarchyid数据类型解决此问题的方法.Hierarchyid数据类型是从SQL Server2008开始提供的,专门用于解决层次结构问题. hierarchyid使用"/"符号来表示层次结构,如顶层(根节点)为"/",其后的子节点可以是"/1/"."/2/"等.再之后的节点可以是"/1/1/"."/2/1/&qu

层次关系表格,不用递归,快速检索。HierarchyId

最近这几天写了个T4自动实现EF code first和Ado的存储过程.使用过程中发现了一个Sql的类型为HierarchyId.看到时真是百思不得齐姐.算了查一下MSDN吧.从微软官网找到了HierarchyId类型.悲催了.这个字段没有对应C# CLR类型.使用EF6时报错,提示我应该是用Byte[]类型,执行一遍程序.还是有错误,算了谷歌吧.谷歌了一下,发现有解决方案了,什么HierarchyId而且不是SQLTypes的HierarchyId,哦 EF没有找到,最后Nuget获取到了

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

层次结构数据定义为一组通过层次结构关系互相关联的数据项. 在层次结构关系中,一个数据项是另一个项的父级或子级. sql server2008开始内置的 hierarchyid 数据类型使存储和查询层次结构数据变得更为容易.hierarchyid 其实是 CLR 数据类型. 废话不多说,看不明白就实际操作一把,然后再回过头来理解. 下面先创建一个表,并插入一些数据: create table RoleMan ( NodeId hierarchyid not null, RoleId int not