标签归档:hierarchyid

mssql sqlserver hierarchyid数据类型之GetRoot函数用法简介说明


摘要:
下文讲述hierarchyid数据类型中函数GetRoot用法简介,
实验环境:sql server 2008 R2



hierarchyid之GetRoot功能说明及举例应用

GetRoot函数的功能是生成数据类型hierarchyid的根节点信息

  select  hierarchyid::GetRoot() as [根节点]
 

mssql sqlserver 2008 hierarchyid 数据类型应用及简介说明


摘要:
hierarchyid 数据类型,是sqlserver 2008中新增的一个CLR数据类型,此数据类型应用于存储具有层级的结构图
例:直接在员工表中存储员工所属的组织结构信息
实验环境:sql server 2008 R2


例:

 CREATE TABLE [maomao365.com]
   (
    IdInfo hierarchyid NOT NULL, ---存储员工组织结构信息
    userId INT NOT NULL,
    userName VARCHAR(50) NOT NULL,
    userExtend VARCHAR(50) NOT NULL
   )
GO

--插入员工信息,列IdInfo为hierarchyid类型,必须以"/"开头和"/"结束,中间放入其路径信息 

INSERT INTO dbo.[maomao365.com] VALUES('/',30000,'总经理','CEO');
INSERT INTO dbo.[maomao365.com] VALUES('/1/',30001,'IT总监','CIO');
INSERT INTO dbo.[maomao365.com] VALUES('/2/',30002,'财务总监','CFO');
INSERT INTO dbo.[maomao365.com] VALUES('/1/1/',30003,'IT经理','IT_M');
INSERT INTO dbo.[maomao365.com] VALUES('/1/2/',30004,'经理','M');
INSERT INTO dbo.[maomao365.com] VALUES('/1/1/1/',30005,'员工','stuff');

--获取公司所有员工信息
SELECT * FROM dbo.[maomao365.com]

  
--获取所有用户信息及所属层级信息
SELECT *,idInfo.GetLevel() AS [层级] 
FROM [maomao365.com]

 

--查看指定员工的所有下属员工
DECLARE @allId hierarchyid
SELECT @allId=idInfo FROM [maomao365.com] WHERE userId=10000
SELECT *,idInfo.GetLevel() AS [层级] 
FROM [maomao365.com] WHERE idInfo.IsDescendantOf(@allId)=1

 

--查看 编号为30004及其所有上级
DECLARE @userId hierarchyid
SELECT @userId=idInfo FROM [maomao365.com] WHERE userId=30004
SELECT *,idInfo.GetLevel()AS [层级] FROM [maomao365.com] WHERE @userId.IsDescendantOf(idInfo)=1

 
go
truncate table [maomao365.com]
drop table [maomao365.com]


/*
与hierarchyid有关的一些函数主要有:

GetAncestor:取得某一个级别的顶级
GetDescendant:取得某一个级别的子代
GetLevel:取得级别
GetRoot:取得根
IsDescendantOf:判断某个节点是否为某个节点的子代
Parse:将字符串转换为hierarchyid格式,字符串需为”/1/”格式(斜杠开头和斜杠结尾)
Read:
Read将读取的二进制转换为 SqlHierarchyId对象值
不可使用cast 或convert函数转换
GetReparentedValue:移动节点
ToString:hierarchyid数据类型转换为字符串
Write:
将SqlHierarchyId 的二进制表示形式写出到传入的 BinaryWriter 中
*/