Hi!
Wenn ich richtig liege
- du hast in deiner Tabelle mehrere Bäume
- du willst die Baum-Wurzel für ein beliebiges Element in deinem
Baum herausfinden?
Dennoch solltest du vielleicht an dieser Stelle keinen Cursor
verwenden sondern eine einfachere WHILE Schleife. Ein Cursor ist
einer dazu gedacht ein einmaliges Result Set zu erzeugen um es
dann Record für Record zu verarbeiten.
In deiner Schleife fragst du dann jeweils nach der ParentId
SELECT [ParentId] FROM [contract] WHERE [Id] = id
Wenn dabei irgendwann NULL zurückgegeben wird, weil [ParentId] für
das Wurzelelement eben NULL sein muss, dann hast du den gewünschten
Datensatz.
DECLARE oldParentId int
DECLARE newParentId int
SELECT oldParentId = id -- dein Funktions-Eingabe-Parameter
WHILE 1 = 1 BEGIN
SELECT newParentId = [ParentId] FROM [contract] WHERE [Id] = oldParentId
IF newParent IS NULL
BREAK
ELSE
SELECT oldParentId = newParentId -- damit die Tabellenabfrage von oben auch wieder ne neue Id benutzt
END
RETURN oldParentId
Da ich nicht viel mit MySQL arbeite kann ich auch nicht garantieren,
dass meine Syntax vollständig korrekt ist :) Konsultiere ggf dein
MySQL Manual.
Grüße,
Frank