Einfach nur um den Faden zu behalten:
(PL/SQL-Syntax... Allerdings mit Notepad geschrieben, hab gerade keinen Editor zur verfügung)
Es gibt keine Möglichkeit so eine Funktion in T-SQL zu schreiben?
Das sähe dann glaube ich so aus: (Oder zumindest so ähnlich? )
Würde mich doch sehr verwundern wenn so etwas nicht unterstützt wird...
(PL/SQL-Syntax... Allerdings mit Notepad geschrieben, hab gerade keinen Editor zur verfügung)
Code:
Create Function recursive_tree
(
id In Number
) Return Varchar2 Is
Cursor get_current_level(p_id_ Number) Is
Select n.nodeid
,n.nodetext
From nodes n
Where n.parentnodeid = coalesce(p_id_, 0);
v_node_id_ get_current_level.nodeid%Type;
v_node_text_ get_current_level.nodetext%Type;
v_return_ Varchar2(4000);
Begin
Open get_current_level(id);
Loop
Fetch get_current_level Into v_note_id_, v_note_text_;
Exit When get_current_level%NotFound;
v_return_ := v_return_ || v_node_text_ || recursive_tree(v_node_id_);
End Loop;
Close get_current_level;
End;
Das sähe dann glaube ich so aus: (Oder zumindest so ähnlich? )
Code:
CREATE FUNCTION dbo.sp_showTreeByRecursion
@parentNodeID INT = NULL
RETURN VARCHAR AS
BEGIN
DECLARE @nodeID INT,
@nodeText VARCHAR(32),
@tempVar VARCHAR(MAX)
DECLARE Nodes_Cursor CURSOR LOCAL FOR
SELECT NodeID,
NodeText
FROM Nodes
WHERE ISNULL(ParentNodeID, 0) = ISNULL(@parentNodeID, 0) AND ParentNodeID IS NOT NULL
ORDER BY NodeText ASC
SET @tempVar = ''
OPEN Nodes_Cursor
FETCH NEXT FROM Nodes_Cursor INTO @nodeID, @nodeText
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC @tempVar = @tempVar + @nodeText + sp_showTreeByRecursion (@nodeID) + ' '
FETCH NEXT FROM Nodes_Cursor INTO @nodeID, @nodeText
END
RETURN @tempVar
END
Würde mich doch sehr verwundern wenn so etwas nicht unterstützt wird...