程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 如何使用Sql Server 2008 Hierarchyid字段類型構造樹型分類表

如何使用Sql Server 2008 Hierarchyid字段類型構造樹型分類表

編輯:關於SqlServer

利用數據庫表構造無限級分類,通常我們會采用下面這種方式

這種主子關系結構清晰,但查詢時會有一些小問題;查詢當前類別的所有子類及子類下的子孫類,會出現遞歸查詢,而實際應用中這種查詢是很常見的,比如我們要查詢所有技術類文章信息;

解決這類問題在SqlServer2005出現之前通常是采用游標來操作,但熟悉數據庫內部機制的人都知道使用游標帶來的性能問題和其他問題是比較嚴重的

到了SqlServer2005下,可以選擇用CTE來做遞歸查詢,例如要查詢所有技術類文章,就可使用這種方式,向上遞歸和向下遞歸基本實現方式是基本一致的

/*查詢所有"技術類文章"類別及其子孫類*/

WITH T_Category(id,name,parentid) as

(

SELECT CategoryID,CategoryName,ParentId FROM Category WHERE CategoryID=3

UNION ALL

SELECT A.CategoryID,A.CategoryName, A.ParentID FROM Category A ,T_Category B where A.ParentId=B.id

)

SELECT * FROM T_Category

這種方式查詢比較簡練,但由於數據庫內部是采用遞歸查詢的方式,其效率依舊不高;

為了能夠實現既簡練又高效的查詢,通常的做法是增加冗余字段,比如增加一個"Path"字段:

查詢時用模糊查詢來進行左匹配,如查詢所有文章類別時這樣寫, Select * from SiteCategory where path like ‘文章%'

對Path建索引後,這種查詢的效率還是相當高的,因此這種方式也是一種常規的設計方式;

下面介紹另一種設計方式,利用SqlServer2008中的Hierarchyid字段類型來構造這種結構;

創建一客戶地區信息表“Customer”,結構如下

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved