SQL Server 2005 中的分層資料擷取
許多開發人員都在努力從SQL Server 2005 中擷取分層數據,尤其是在處理複雜的物件層次結構時。這主要是由於缺少 CONNECT_BY 子句,這是 Oracle 資料庫中用於分層查詢的強大功能。
一種方法是建立一個自引用表,其中的欄位包含每個子記錄的父記錄 ID 。然後可以使用視圖將子級對應到層次結構層級。此外,可以採用複雜的查詢來將父母與孩子聯繫起來。雖然此方法很實用,但它可能很麻煩且效率低。
SQL Server 2005 中分層查詢的一個更優雅的解決方案是利用公共表表達式 (CTE)。 CTE 可讓您在查詢中建立臨時表,可用於複雜的層次結構。
以下範例示範如何建立層次表並使用CTE 選擇層次結構並建立路徑每個項目:
CREATE TABLE tblHierarchy (ID int, ParentID int NULL, Name varchar(128)); INSERT INTO tblHierarchy VALUES (1, NULL, '1'); INSERT INTO tblHierarchy VALUES (2, NULL, '2'); INSERT INTO tblHierarchy VALUES (3, NULL, '3'); INSERT INTO tblHierarchy VALUES (4, 1, '1.1'); INSERT INTO tblHierarchy VALUES (5, 1, '1.2'); INSERT INTO tblHierarchy VALUES (6, 4, '1.1.1'); WITH Parent AS ( SELECT ID, ParentID, Name AS Path FROM tblHierarchy WHERE ParentID IS NULL UNION ALL SELECT TH.ID, TH.ParentID, CONVERT(varchar(128), Parent.Path + '/' + TH.Name) AS Path FROM tblHierarchy TH INNER JOIN Parent ON Parent.ID = TH.ParentID ) SELECT * FROM Parent
輸出:
ID ParentID Path 1 NULL 1 2 NULL 2 3 NULL 3 4 1 1/1.1 5 1 1/1.2 6 4 1/1.1/1.1.1
此方法為檢索分層資料提供了更有效率、更簡潔的解決方案在SQL Server 2005 中,消除了對複雜查詢的需要,並使您能夠更有效地使用層次結構。
以上是如何在SQL Server 2005中有效率地檢索分層資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!