WEB开发网
开发学院数据库MSSQL Server SQL Server 2008 中的hierarchyid类型应用 阅读

SQL Server 2008 中的hierarchyid类型应用

 2012-12-10 14:30:12 来源:WEB开发网   
核心提示: SQL Server 2008的一个重要新增特性,主要解决的问题是拥有层次关系的表格,SQL Server 2008 中的hierarchyid类型应用,例如我们日常生活中用到最多的组织结构图,我们一般会用一个Employees表保存员工数据,如下面的例子--创建表CREATE TABLE Employees( O

 SQL Server 2008的一个重要新增特性。主要解决的问题是拥有层次关系的表格。例如我们日常生活中用到最多的组织结构图。我们一般会用一个Employees表保存员工数据,而每个员工则又可能会有相应的上级。以前要得到某个员工的所有上级,或者所有下级,通常所采取的方法都是递归。SQL Server 2005开始支持的CTE从一定程序上方便了该工作的实现。

但SQL 2008的hierarchyid让这个工作更加简化和直接。而该类型其实是一个CLR自定义数据类型。
image
 
一般我们使用的时候,如下面的例子
--创建表
CREATE TABLE Employees
(
   Org_Id hierarchyid NOT NULL,
   EmployeeId INT NOT NULL,
   EmployeeName VARCHAR(50) NOT NULL,
   Title VARCHAR(50) NOT NULL
)
GO
--插入一些员工,注意第一个列的格式,必须用/开始和结束。这是一个路径的符号。这是一个关键
INSERT INTO dbo.Employees VALUES('/',10000,'陈希章','CEO');
INSERT INTO dbo.Employees VALUES('/1/',10001,'张三','CTO');
INSERT INTO dbo.Employees VALUES('/2/',10002,'李四','CFO');
INSERT INTO dbo.Employees VALUES('/1/1/',10003,'王五','IT Manager');
INSERT INTO dbo.Employees VALUES('/1/2/',10004,'赵六','Manager');
INSERT INTO dbo.Employees VALUES('/1/1/1/',10005,'洪七','Employee');
--查看所有的员工
SELECT * FROM dbo.Employees
image 
--查看所有的员工及其级别
SELECT *,Org_Id.GetLevel() AS Level FROM Employees
image
--查看陈希章的所有下属
DECLARE @BOSS hierarchyid
SELECT @BOSS=Org_Id FROM Employees WHERE EmployeeID=10000
SELECT *,Org_Id.GetLevel()AS Level FROM Employees WHERE Org_Id.IsDescendantOf(@BOSS)=1
image
--查看赵六及其所有上级
DECLARE @Employee hierarchyid
SELECT @Employee=Org_Id FROM Employees WHERE EmployeeID=10004
SELECT *,Org_Id.GetLevel()AS Level FROM Employees WHERE @Employee.IsDescendantOf(Org_Id)=1
image

1 2  下一页

Tags:SQL Server hierarchyid

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接