SQL SERVER 2008的层次结构支持

在SQL SERVER 2008中引入了一个新的类型,为hierarchyid,支持层次结构,hierarchyid从技术上讲是一个CLR UDT,但是在SQL SERVER 2008不必先启用它。

考虑下面的层次结构

可以用如下SQL语句表示

CREATE TABLE Employees 
(node hierarchyid PRIMARY KEY CLUSTERED,
 level as node.GetLevel() PERSISTED,
 employee_id INT UNIQUE,
 employee_name varchar(30) NOT NULL)
 
 
insert into Employees Values(hierarchyid::GetRoot(),5000,'Rob') 

declare @ManagerNode hierarchyid
declare @Level hierarchyid

select @ManagerNode=node FROM Employees WHERE employee_id=5000
insert into Employees Values(@ManagerNode.GetDescendant(NULL,NULL),5001,'Bill')

select @Level=node from Employees where employee_id=5001
insert into Employees values(@ManagerNode.GetDescendant(@Level,NULL),5002,'Steve')

select node.ToString() as NodeAsString,node as NodeAsBinary,
  node.GetLevel() As Level,employee_id,employee_name from Employees
  
declare @Level hierarchyid  
select @Level=node from Employees where employee_id=5002
insert into Employees values(@Level.GetDescendant(NULL,NULL),5003,'Jim')  

declare @child1 hierarchyid
select @child1=node from Employees where employee_id=5003
insert into Employees values(@Level.GetDescendant(@child1,NULL),5004,'Steve')

select @Level=node from Employees where employee_id=5001
insert into Employees values(@Level.GetDescendant(NULL,NULL),5005,'Joseph')


select @child1=node from Employees where employee_id=5005
insert into Employees values(@Level.GetDescendant(@child1,NULL),5006,'Joan')


select @Level=node from Employees where employee_id=5006
insert into Employees values(@Level.GetDescendant(NULL,NULL),5007,'Alice')

select @child1=node from Employees where employee_id=5007
insert into Employees values(@Level.GetDescendant(@child1,NULL),5008,'Barbara')

select node.ToString() as NodeAsString,node as NodeAsBinary,
  node.GetLevel() As Level,employee_id,employee_name from Employees
 
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值