Menavigasi Data Hierarki dalam SQL Server 2005
Mendapatkan semula data hierarki daripada SQL Server 2005 boleh menjadi mencabar, terutamanya apabila berurusan dengan rujukan sendiri jadual di mana rekod kanak-kanak menunjuk kepada ID ibu bapa mereka. Walaupun pandangan dan pertanyaan kompleks lazimnya digunakan, mereka sering tidak mempunyai keanggunan dan kecekapan.
Satu penyelesaian memanfaatkan Common Table Expression (CTE) untuk membina struktur hierarki dan menjana laluan untuk setiap item. Pendekatan ini melibatkan mencipta CTE bernama Parent yang bermula dengan memilih nod akar (ParentID ialah NULL) dan nama mereka sebagai laluan. Ia kemudian menambah nod anak secara rekursif, menggabungkan nama mereka ke laluan induk.
Kod berikut menunjukkan pendekatan ini:
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 ini mencipta jadual hierarki dengan Laluan lajur tambahan yang mengandungi laluan lengkap ke setiap nod. Output pertanyaan yang terhasil ialah:
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
Pendekatan ini menyediakan cara yang bersih dan cekap untuk mendapatkan semula data hierarki daripada jadual rujuk kendiri dalam SQL Server 2005. Ia menghapuskan keperluan untuk pertanyaan manual yang kompleks dan membolehkan navigasi hierarki yang lebih mudah.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mendapatkan Data Hierarki dengan Cekap daripada Jadual Rujukan Kendiri dalam SQL Server 2005?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!