Создавайте его по ходу дела, точно так же, как считаете уровни:
WITH TempCtgry ( CtgryID, CtgryName, ParentCtgryId, Lvl ) AS (
SELECT CategoryID, CategoryName, ParentCatID, 0 as Level,
Convert( VarChar(1024), CategoryName ) as Path
FROM Category r
WHERE r.ParentCatID IS NULL
UNION ALL
SELECT r1.CategoryID, r1.CategoryName, r1.ParentCatID, TempCtgry.Lvl + 1,
Convert( VarChar(1024), Path + ' >> ' + r1.CategoryName ) as Path
FROM Category r1 INNER JOIN
TempCtgry on r1.ParentCatID = TempCtgry.CtgryID
)
SELECT *
FROM TempCtgry
Чтобы отобразить путь в виде ссылок на веб-странице, вам понадобятся как имена категорий для отображения, так и соответствующие идентификаторы для использования в ссылках. Простой разделитель, который позволяет использовать функцию разделения строк, например. это упрощает код отображения:
WITH TempCtgry ( CtgryID, CtgryName, ParentCtgryId, Lvl ) AS (
SELECT CategoryID, CategoryName, ParentCatID, 0 as Level,
Convert( VarChar(1024), CategoryName ) as Path,
Convert( VarChar(1024), CategoryID ) as PathIds
FROM Category r
WHERE r.ParentCatID IS NULL
UNION ALL
SELECT r1.CategoryID, r1.CategoryName, r1.ParentCatID, TempCtgry.Lvl + 1,
Convert( VarChar(1024), Path + '|' + r1.CategoryName ) as Path,
Convert( VarChar(1024), PathIds + '|' + Convert( VarChar(9), CategoryId ) ) as PathIds
FROM Category r1 INNER JOIN
TempCtgry on r1.ParentCatID = TempCtgry.CtgryID
)
SELECT *
FROM TempCtgry
Примечание. Предполагается, что вертикальная черта ("|") не может встречаться в имени категории.
Код ASP.NET должен будет разделить обе строки пути и пройтись по ним вместе, создавая ссылки по ходу дела. Удобным разделителем отображения является «»» (U+00BB: двойная кавычка, указывающая вправо).
Можно добавить в запрос весь код для создания требуемого HTML, но это не то, к чему он относится.
person
HABO
schedule
04.05.2013