淺談SQL Server 2008中新增屬性Hierarchyid
例如我們日常生活中用到最多的組織結構圖。我們一般會用一個Employees表保存員工數據,而每個員工則又可能會有相應的上級。以前要得到某個員工的所有上級,或者所有下級,通常所采取的方法都是遞歸。SQL Server 2005開始支持的CTE從一定程序上方便了該工作的實現。
但SQL 2008的hierarchyid讓這個工作更加簡化和直接。而該類型其實是一個CLR自定義數據類型。
一般我們使用的時候,如下面的例子
--創建表 |
--插入一些員工,注意第一個列的格式,必須用/開始和結束。這是一個路徑的符號。這是一個關鍵
INSERT INTO dbo.Employees VALUES('/',10000,'陳希章','CEO'); |
--查看所有的員工
SELECT * FROM dbo.Employees |
--查看所有的員工及其級別 |
--查看陳希章的所有下屬
DECLARE @BOSS hierarchyid |
--查看趙六及其所有上級 |
與hierarchyid有關的一些函數主要有
◆GetAncestor :取得某一個級別的祖先
◆GetDescendant :取得某一個級別的子代
◆GetLevel :取得級別
◆GetRoot :取得根
◆IsDescendantOf :判斷某個節點是否為某個節點的子代
◆Parse :將字符串轉換為hierarchyid。該字符串的格式通常都是/1/這樣的
◆Read :Read 從傳入的 BinaryReader 讀取 SqlHierarchyId 的二進制表示形式,并將 SqlHierarchyId 對象設置為該值。不能使用 Transact-SQL 調用 Read。請改為使用 CAST 或 CONVERT。
◆GetReparentedValue :可以用來移動節點(或者子樹)
◆ToString :將hierarchyid轉換為字符串,與parse正好相反
◆Write Write 將 SqlHierarchyId 的二進制表示形式寫出到傳入的 BinaryWriter 中。無法通過使用 Transact-SQL 來調用 Write。請改為使用 CAST 或 CONVERT。
【編輯推薦】