知识大全 SQL Server 2008 中的hierarchyid类型应用

Posted 员工

篇首语:如果每个人都理解你,那你得普通成什么样!本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 SQL Server 2008 中的hierarchyid类型应用相关的知识,希望对你有一定的参考价值。

SQL Server 2008 中的hierarchyid类型应用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

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

  但SQL 的hierarchyid让这个工作更加简化和直接 而该类型其实是一个CLR自定义数据类型

>

  一般我们使用的时候 如下面的例子

   创建表

  CREATE TABLE Employees

  (

  Org_Id hierarchyid NOT NULL

  EmployeeId INT NOT NULL

  EmployeeName VARCHAR( ) NOT NULL

  Title VARCHAR( ) NOT NULL

  )

  GO

   插入一些员工 注意第一个列的格式 必须用/开始和结束 这是一个路径的符号 这是一个关键

  INSERT INTO dbo Employees VALUES( / 陈希章 CEO );

  INSERT INTO dbo Employees VALUES( / / 张三 CTO );

  INSERT INTO dbo Employees VALUES( / / 李四 CFO );

  INSERT INTO dbo Employees VALUES( / / / 王五 IT Manager );

  INSERT INTO dbo Employees VALUES( / / / 赵六 Manager );

  INSERT INTO dbo Employees VALUES( / / / / 洪七 Employee );

   查看所有的员工

  SELECT * FROM dbo Employees

>

   查看所有的员工及其级别

  SELECT * Org_Id GetLevel() AS Level FROM Employees

>

   查看陈希章的所有下属

  DECLARE @BOSS hierarchyid

  SELECT @BOSS=Org_Id FROM Employees WHERE EmployeeID=

  SELECT * Org_Id GetLevel()AS Level FROM Employees WHERE Org_Id IsDescendantOf(@BOSS)=

>

   查看赵六及其所有上级

  DECLARE @Employee hierarchyid

  SELECT @Employee=Org_Id FROM Employees WHERE EmployeeID=

  SELECT * Org_Id GetLevel()AS Level FROM Employees WHERE @Employee IsDescendantOf(Org_Id)=

>

  与hierarchyid有关的一些函数主要有

  GetAncestor 取得某一个级别的祖先

  GetDescendant 取得某一个级别的子代

  GetLevel 取得级别

  GetRoot 取得根

  IsDescendantOf 判断某个节点是否为某个节点的子代

  Parse 将字符串转换为hierarchyid 该字符串的格式通常都是/ /这样的

  Read

  Read 从传入的 BinaryReader 读取 SqlHierarchyId 的二进制表示形式 并将 SqlHierarchyId 对象设置为该值 不能使用 Transact SQL 调用 Read 请改为使用 CAST 或 CONVERT

  GetReparentedValue 可以用来移动节点(或者子树)

  ToString 将hierarchyid转换为字符串 与parse正好相反

  Write

cha138/Article/program/SQLServer/201311/22307

相关参考