Используя CTE в SQL Server 2005 и более поздних версиях, вот фрагмент, который я должен сделать:
WITH Paths([Level], [FullPath], [ID]) AS
(
SELECT
0 AS [Level],
Name AS FullPath,
ID
FROM dbo.Entity
WHERE (ParentEntityID IS NULL)
UNION ALL
SELECT
p.[Level] + 1 AS [Level],
CASE RIGHT(p.[FullPath], 1)
WHEN '\' THEN p.[FullPath] + c.[Name]
ELSE p.[FullPath] + '\' + c.[Name]
END AS FullPath,
c.ID
FROM dbo.Entity AS c
INNER JOIN Paths AS p ON p.ID = c.ParentEntityID
)
SELECT [FullPath], [ID]
FROM Paths