Mit dem folgenden SQL-Befehl kann die Hierarchie (vom obersten bis zum gewählen Lagerort) eines Lagerortes abgefragt werden (hier beispielhaft vom Lagerort mit der ID 83):
In Einzeldatensätzen (pro Lagerort eine Zeile):
Code: Alles auswählen
DECLARE @no bit; WITH Lagerorte(ID, Parent, Bezeichnung, Level) AS (
SELECT LO1.ID, LO1.Parent, LO1.Bezeichnung, 0 AS Level FROM Lagerort AS LO1 WHERE LO1.ID = 83
UNION ALL
SELECT LO2.ID, LO2.Parent, LO2.Bezeichnung, (Level + 1) AS Level FROM Lagerort AS LO2 INNER JOIN Lagerorte AS LL ON LO2.ID = LL.Parent
) SELECT Bezeichnung FROM Lagerorte ORDER BY Level DESC OPTION (MAXRECURSION 100);
Code: Alles auswählen
DECLARE @no bit; WITH Lagerorttext(ID, Parent, Bezeichnung, Level, SB) AS (
SELECT LO1.ID, LO1.Parent, LO1.Bezeichnung, 0 AS Level, CAST(LO1.Bezeichnung AS VARCHAR(255)) AS SB FROM Lagerort AS LO1 WHERE LO1.ID = 83
UNION ALL
SELECT LO2.ID, LO2.Parent, LO2.Bezeichnung, (Level + 1) AS Level, CAST(LO2.Bezeichnung + ' / ' + SB AS VARCHAR(255)) AS SB FROM Lagerort AS LO2 INNER JOIN Lagerorttext AS LL ON LO2.ID = LL.Parent
) SELECT TOP 1 SB FROM Lagerorttext ORDER BY Level DESC OPTION (MAXRECURSION 100);
Code: Alles auswählen
DECLARE @no bit; WITH Lagerorttext(ID, Parent, Bezeichnung, Level, SB) AS (
SELECT LO1.ID, LO1.Parent, LO1.Bezeichnung, 0 AS Level, CAST(LO1.Bezeichnung AS VARCHAR(255)) AS SB FROM Lagerort AS LO1 WHERE Parent = 0
UNION ALL
SELECT LO2.ID, LO2.Parent, LO2.Bezeichnung, (Level + 1) AS Level, CAST(SB + ' / ' + LO2.Bezeichnung AS VARCHAR(255)) AS SB FROM Lagerort AS LO2 INNER JOIN Lagerorttext AS LL ON LO2.Parent = LL.ID
) SELECT ID, SB FROM Lagerorttext ORDER BY ID ASC OPTION (MAXRECURSION 100);