То, как вы это сделали, выглядит хорошо, вы можете использовать рекурсивные функции CTE для создания иерархии для вас
Что-то вроде
DECLARE @ITEM TABLE(
id INT,
type VARCHAR(20),
slug VARCHAR(50),
title VARCHAR(50),
parentId INT
)
INSERT INTO @ITEM SELECT 1,'area','blogs','Blogs', NULL
INSERT INTO @ITEM SELECT 2,'blog','programming','Programming blog',1
INSERT INTO @ITEM SELECT 3,'tagsearch','tags',',',2
INSERT INTO @ITEM SELECT 4,'post','hello-world','Hello World!',2
;WITH Items AS (
SELECT *,
CAST('/' + slug + '/' AS VARCHAR(50)) PathVal
FROM @ITEM
WHERE parentId IS NULL
UNION ALL
SELECT i.*,
CAST(Items.PathVal + i.slug + '/' AS VARCHAR(50))
FROM Items INNER JOIN
@ITEM i ON i.parentId = Items.ID
)
SELECT *
FROM Items