SQL Server 2008R2 hierarchyid的使用方法(父子节点、上下级处理)
SQL Server 2008 及以上版本,出了这样一个字段类型,用于处理父子节点、员工上下级等问题。使得此类问题变得更容易处理些。
直接上数据:
--创建表
CREATE TABLE tab
(
Id hierarchyid NOT NULL,
Name VARCHAR(10) NOT NULL
)
--插入测试数据
insert into tab
select '/','张三' union all
select '/1/','李四' union all
select '/2/','王五' union all
select '/1/1/','赵六' union all
select '/1/2/','何七' union all
select '/1/1/1/','蒋八' union all
select '/1/1/1/1/','王九'
--drop table tab
select *,Id.GetLevel() as '级别' from tab
/*
Id name 级别
0x 张三 0
0x58 李四 1
0x68 王五 1
0x5AC0 赵六 2
0x5B40 何七 2
0x5AD6 蒋八 3
0x5AD6B0 王九 4
*/
--查赵六及其下属
DECLARE @赵六 hierarchyid
SELECT @赵六=Id FROM tab WHERE name='赵六'
SELECT *,Id.GetLevel()AS '级别' FROM tab WHERE Id.IsDescendantOf(@赵六)=1
/*
Id name 级别
0x5AC0 赵六 2
0x5AD6 蒋八 3
0x5AD6B0 王九 4
*/
--查赵六的上级
DECLARE @赵六 hierarchyid
SELECT @赵六=Id FROM tab WHERE name='赵六'
SELECT *,Id.GetLevel()AS '级别' FROM tab WHERE @赵六.IsDescendantOf(Id)=1
/*
Id name 级别
0x 张三 0
0x58 李四 1
0x5AC0 赵六 2
*/