WITH kategorien AS
(
SELECT dbo.tkategorie.kKategorie, dbo.tkategorie.kOberKategorie, 1 AS Tiefe, CAST(tKategorieSprache.cName AS varchar(500)) AS Kategoriepfad
FROM dbo.tkategorie
JOIN dbo.tSpracheUsed ON nStandard = 1
JOIN dbo.tKategorieSprache ON tKategorieSprache.kKategorie = tkategorie.kKategorie
AND tKategorieSprache.kSprache = tSpracheUsed.kSprache
JOIN tkategorieartikel ON tkategorieartikel.kKategorie = tkategorie.kKategorie
WHERE dbo.tkategorieartikel.kArtikel = @Key
UNION ALL
SELECT dbo.tkategorie.kKategorie, dbo.tkategorie.kOberKategorie, Tiefe +1, CAST(tKategorieSprache.cName + ' -> ' + kategorien.Kategoriepfad AS varchar(500)) AS Kategoriepfad
FROM dbo.tkategorie
JOIN dbo.tSpracheUsed ON nStandard = 1
JOIN dbo.tKategorieSprache ON tKategorieSprache.kKategorie = tkategorie.kKategorie
AND tKategorieSprache.kSprache = tSpracheUsed.kSprache
JOIN kategorien ON dbo.tkategorie.kKategorie = kategorien.kOberKategorie
)
SELECT Kategoriepfad
, Tiefe AS Kategorietiefe
FROM kategorien
WHERE kOberKategorie = 0
GROUP BY Kategoriepfad, Tiefe