熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> SQL Server >> 正文

SQL Server 2008 中的hierarchyid類型應用

2013-11-15 14:46:15  來源: SQL Server 

  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 dboEmployees VALUES(/陳希章CEO);

  INSERT INTO dboEmployees VALUES(//張三CTO);

  INSERT INTO dboEmployees VALUES(//李四CFO);

  INSERT INTO dboEmployees VALUES(///王五IT Manager);

  INSERT INTO dboEmployees VALUES(///趙六Manager);

  INSERT INTO dboEmployees VALUES(////洪七Employee);

  查看所有的員工

  SELECT * FROM dboEmployees

  查看所有的員工及其級別

  SELECT *Org_IdGetLevel() AS Level FROM Employees

  查看陳希章的所有下屬

  DECLARE @BOSS hierarchyid

  SELECT @BOSS=Org_Id FROM Employees WHERE EmployeeID=

  SELECT *Org_IdGetLevel()AS Level FROM Employees WHERE Org_IdIsDescendantOf(@BOSS)=

  查看趙六及其所有上級

  DECLARE @Employee hierarchyid

  SELECT @Employee=Org_Id FROM Employees WHERE EmployeeID=

  SELECT *Org_IdGetLevel()AS Level FROM Employees WHERE @EmployeeIsDescendantOf(Org_Id)=

  與hierarchyid有關的一些函數主要有

  GetAncestor 取得某一個級別的祖先

  GetDescendant 取得某一個級別的子代

  GetLevel 取得級別

  GetRoot 取得根

  IsDescendantOf 判斷某個節點是否為某個節點的子代

  Parse 將字符串轉換為hierarchyid該字符串的格式通常都是//這樣的

  Read

  Read 從傳入的 BinaryReader 讀取 SqlHierarchyId 的二進制表示形式並將 SqlHierarchyId 對象設置為該值不能使用 TransactSQL 調用 Read請改為使用 CAST 或 CONVERT

  GetReparentedValue 可以用來移動節點(或者子樹)

  ToString 將hierarchyid轉換為字符串與parse正好相反

  Write

  Write 將 SqlHierarchyId 的二進制表示形式寫出到傳入的 BinaryWriter 中無法通過使用 TransactSQL 來調用 Write請改為使用 CAST 或 CONVERT


From:http://tw.wingwit.com/Article/program/SQLServer/201311/22307.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.