Heute habe ich wieder ein Highlight beim SQL-Server gefunden, was die Arbeit mit dieser Datenbank erheblich erleichtert. Ich hatte ein Problem und zwar mußte ich eine Hirachie und den entsprechenden Pfad aus der Datenbank ziehen.
Mein erster Gedanke war eine recursive Table-Valued-Funktion, die mir das Ergebnis zurückliefert. Das geht nun einfacher (leider erst im SQL-Server 2005):
declare @trenner nvarchar
set @trenner = '~';
WITH StructReports ( STRUKTURELEMENT_ID, VATER_STRUKTURELEMENT_ID, NAME , Level, path)
AS
(
-- Anchor member definition
SELECT
STRUKTURELEMENT_ID,
VATER_STRUKTURELEMENT_ID,
NAME ,
0 AS Level,
se.NAME as path
FROM dbo.Strukturelement as se
WHERE VATER_STRUKTURELEMENT_ID is null
UNION ALL
-- Recursive member definition
SELECT
se.STRUKTURELEMENT_ID,
se.VATER_STRUKTURELEMENT_ID,
se.NAME ,
Level +1,
sv.path + @trenner + se.Name as path
FROM dbo.Strukturelement as se
inner join StructReports as sv
on se.VATER_STRUKTURELEMENT_ID = sv.STRUKTURELEMENT_ID
)
Select * from StructReports r
order by path
Es ist zwar nicht eine so elegante Lösung, wie es Oracle mit dem Befehl “connect by” geschaft hat, aber es ist auch nicht schlecht.
Die hier gezeigt Möglichkeit gibt recursive die alle Elemente der Tabelle “Strukturelemente” zurück. Ein Struktur kann eine Verzeichnisstruktur oder eine Katalog sein, wie jeder mag. Hier hat sich Microsoft doch eine gute Methode einfallen lassen wie man endlich in der 9. Version des SQL-Servers Baumstrukturen per Select abrufen kann.