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