码迷,mamicode.com
首页 > 数据库 > 详细

TSql HierarchyID 数据类型用法

时间:2015-06-17 18:07:04      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:

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)

技术分享

 

TSql HierarchyID 数据类型用法

标签:

原文地址:http://www.cnblogs.com/ljhdo/p/4581349.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!