Посмотрите на использование Sql Server 2005 CTE .
DECLARE @Table TABLE(
ID INT,
Val VARCHAR(10),
ParentID INT
)
INSERT INTO @Table SELECT 1, 'A', NULL
INSERT INTO @Table SELECT 2, 'B', NULL
INSERT INTO @Table SELECT 3, 'C', 1
INSERT INTO @Table SELECT 4, 'D', 1
INSERT INTO @Table SELECT 5, 'E', 4
INSERT INTO @Table SELECT 5, 'F', 2
;WITh Parents AS (
SELECT *,
CAST(Val + '/' AS VARCHAR(100))PathVal
FROm @Table
WHERE ParentID IS NULL
UNION ALL
SELECT t.*,
CAST(p.PathVal + t.Val + '/' AS VARCHAR(100))
FROM @Table t INNER JOIN
Parents p ON t.ParentID = p.ID
)
SELECT *
FROM Parents
В зависимости от глубины дерева, вы можете захотеть взглянуть на
MAXRECURSION подсказка для запроса