在SQL Server 2005 中導覽分層資料
從SQL Server 2005 擷取分層資料可能具有挑戰性,尤其是在處理自引用時表,其中子記錄指向其父母的ID。雖然視圖和複雜查詢很常見,但它們通常缺乏優雅和效率。
一種解決方案利用公共表表達式 (CTE) 來建立層次結構並為每個項目產生路徑。此方法涉及建立一個名為 Parent 的 CTE,該 CTE 首先選擇根節點(ParentID 為 NULL)及其名稱作為路徑。然後,它遞歸地添加子節點,將它們的名稱連接到父路徑。
以下程式碼示範了這種方法:
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
此 CTE 建立一個帶有附加列 Path 的分層表,其中包含到每個節點的完整路徑。產生的查詢輸出將是:
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中文網其他相關文章!