新聞中心
SQL Server 2008原生的分層數(shù)據(jù)類型hierarchyid是本文我們主要要介紹的內(nèi)容,接下來就讓我們通過實際的例子來介紹它的應(yīng)用,希望能夠?qū)δ兴鶐椭?/p>

專注于為中小企業(yè)提供網(wǎng)站設(shè)計、網(wǎng)站建設(shè)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)確山免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了千余家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
如果是在SQL Server 2000中,我們需要讀取分層結(jié)構(gòu)數(shù)據(jù)時,不得不借助遞歸。在SQL server 2005中,我們可以使用CTE,當(dāng)然,好的數(shù)據(jù)結(jié)構(gòu)設(shè)計可以避免你使用CTE,請看這里:http://www.cnblogs.com/downmoon/archive/2009/10/23/1588405.html。
如果你是一個數(shù)據(jù)庫設(shè)計新手,那么在sql server 2008中可以使用新的原生分層結(jié)構(gòu)數(shù)據(jù)hierarchyid。
關(guān)于它的詳細(xì)說明,請看MSDN:
http://msdn.microsoft.com/zh-cn/library/bb677173%28v=sql.100%29.aspx
http://64.4.11.252/zh-cn/library/bb677173.aspx
http://msdn.microsoft.com/en-us/magazine/cc794278.aspx#id0090037
需要注意的是,它可以改造傳統(tǒng)數(shù)據(jù)表而成。但不可以實現(xiàn)與XML互相轉(zhuǎn)換。
下面我們看一個示例:
- if OBJECT_ID('[Category_hierarchyid]') is not null
- drop table [Category_hierarchyid]
- go
- --創(chuàng)建表
- CREATE TABLE [Category_hierarchyid]
- (
- H_ID hierarchyid NOT NULL,
- C_ID INT primary key identity(1000,1) NOT NULL,
- C_Name NVARCHAR(50) NOT NULL,
- Title NVARCHAR(50) NOT NULL
- )
- GO
- TRUNCATE table [Category_hierarchyid]
- GO
- INSERT INTO [Category_hierarchyid]([H_ID],[C_Name],[Title])
- select '/','蔬菜','蔬菜' union all
- select '/1/','根菜類','蔬菜' union all
- select '/2/','葉菜類','蔬菜' union all
- select '/3/','茄果類','蔬菜' union all
- select '/4/','甘藍(lán)類','蔬菜' union all
- select '/1/1/','蘿卜','蔬菜' union all
- select '/1/1/','胡蘿卜','蔬菜' union all
- select '/4/2/','甘藍(lán)','蔬菜' union all
- select '/2/4/','花椰菜','蔬菜' union all
- select '/3/3/','茄子','蔬菜' union all
- select '/3/3/','番茄','蔬菜' union ALL
- select '/1/1/5/','白蘿卜','蔬菜'
- go
SQL server 2008 中的原生分層數(shù)據(jù):hierarchyid
--查看所有的分類
- SELECT * FROM [Category_hierarchyid]
- /*
- H_ID C_ID C_Name Title
- 0x 1000 蔬菜 蔬菜
- 0x58 1001 根菜類 蔬菜
- 0x68 1002 葉菜類 蔬菜
- 0x78 1003 茄果類 蔬菜
- 0x84 1004 甘藍(lán)類 蔬菜
- 0x5AC0 1005 蘿卜 蔬菜
- 0x5AC0 1006 胡蘿卜 蔬菜
- 0x85A0 1007 甘藍(lán) 蔬菜
- 0x6C20 1008 花椰菜 蔬菜
- 0x7BC0 1009 茄子 蔬菜
- 0x7BC0 1010 番茄 蔬菜
- 0x5AE3 1011 白蘿卜 蔬菜
- */
--查看所有的分類及級別
- SELECT *,H_ID.GetLevel() AS Level FROM [Category_hierarchyid]
- /*
- H_ID C_ID C_Name Title Level
- 0x 1000 蔬菜 蔬菜 0
- 0x58 1001 根菜類 蔬菜 1
- 0x68 1002 葉菜類 蔬菜 1
- 0x78 1003 茄果類 蔬菜 1
- 0x84 1004 甘藍(lán)類 蔬菜 1
- 0x5AC0 1005 蘿卜 蔬菜 2
- 0x5AC0 1006 胡蘿卜 蔬菜 2
- 0x85A0 1007 甘藍(lán) 蔬菜 2
- 0x6C20 1008 花椰菜 蔬菜 2
- 0x7BC0 1009 茄子 蔬菜 2
- 0x7BC0 1010 番茄 蔬菜 2
- 0x5AE3 1011 白蘿卜 蔬菜 3
- */
--查看根菜類及其子分類
- DECLARE @Parent hierarchyid
- SELECT @Parent=H_ID FROM [Category_hierarchyid] WHERE C_ID=1001
- ----PRINT @Parent.ToString()
- SELECT *,H_ID.GetLevel() AS Level FROM [Category_hierarchyid]
- WHERE H_ID.IsDescendantOf(@Parent)=1
- /*
- H_ID C_ID C_Name Title Level
- 0x58 1001 根菜類 蔬菜 1
- 0x5AC0 1005 蘿卜 蔬菜 2
- 0x5AC0 1006 胡蘿卜 蔬菜 2
- 0x5AE3 1011 白蘿卜 蔬菜 3
- */
--查看胡蘿卜及其所有父分類
- DECLARE @Son hierarchyid
- SELECT @Son=H_ID FROM [Category_hierarchyid] WHERE C_ID=1006
- SELECT *,H_ID.GetLevel()AS Level FROM [Category_hierarchyid]
- WHERE @Son.IsDescendantOf(H_ID)=1
- /*
- H_ID C_ID C_Name Title Level
- 0x 1000 蔬菜 蔬菜 0
- 0x58 1001 根菜類 蔬菜 1
- 0x5AC0 1005 蘿卜 蔬菜 2
- 0x5AC0 1006 胡蘿卜 蔬菜 2
- */
關(guān)于SQL Server 2008原生的分層數(shù)據(jù)類型hierarchyid的知識就介紹到這里了,希望本次的介紹能夠?qū)δ兴斋@!
本文名稱:SQLServer2008原生的分層數(shù)據(jù)類型hierarchyid簡介
文章鏈接:http://www.dlmjj.cn/article/cossipc.html


咨詢
建站咨詢
