# Rekursion mit T-SQL



## cubeless (20. September 2007)

Hallo,

ich verwende den MS-SQL-Server als DBMS und habe folgende Relation: 

Group(group_id, parent_id, name, ...)

Nun möchte mithilfe einer rekursiven Table-valued Function, die eine Gruppen-ID als Parameter aufnimmt alle Kinderelemente einer Gruppe als Tabelle zurückgeben lassen.

Leider scheiter ich total an der Rekursion, kann mir bitte jemand weiterhelfen?

Vielen Dank!
Grüße
Daniel


----------



## Nico Graichen (20. September 2007)

Hi

Soweit mir bekannt, unterstützt SQL keine Rekursion (lass mich aber gern eines besseren belehren)
Du kannst sowas nur per rekursivem Funktionsaufruf regeln.


----------



## cubeless (20. September 2007)

Tut mir leid, dann habe ich mich falsch ausgedrückt.

Ich wollte das Ganze natürlich mit einem rekursiven Funktionsaufruf lösen, aber genau das verstehe ich nicht, da die jeweiligen Ergebnisse Sets sind.


----------



## Nico Graichen (20. September 2007)

Und was genau verstehst du nicht?
Wie machst du denn die Funktionsaufrufe (Sprache,.....) ?

Ggf wäre ein bisschen Code nicht schlecht, in dem du zeigst, wo dein Problem genau liegt


----------



## cubeless (20. September 2007)

Hallo,
das ganze mache ich in T-SQL.


```
CREATEFUNCTION [dbo].[fkt_recursive_groups] 
(	
	@param_group_id INT = 1
)
RETURNS @result TABLE (group_id INT, parent_id INT)
AS
BEGIN

	--code here
	DECLARE @group_id INT, @parent_id INT
	DECLARE @r INT, @i INT

	INSERT INTO @result
	SELECT group_id, parent_id 
	FROM [Group] 
	WHERE parent_id =@param_group_id

	SET @i = 1
	WHILE(@i<=@r)
		BEGIN
		--pro durchlauf die rekursion starten...
		SET @i = @i + 1
		END

RETURN
END
```

Ich verstehe nicht, wie ich das Ergebnis an die Ergebnis-Tabelle pro Rekursionsdurchlauf weitergebe.

Grüße
Daniel


----------

