Bonjour,

Je viens de débuter dans le développement de requêtes récursives sous MS SQL Server 2005. J'ai un petit problème avec celle-ci :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
WITH Predecesseurs (No_fils, Pred) 
AS
    (SELECT No_elem_fils, CAST(No_elem_pere AS VARCHAR(MAX))
    FROM   Preseances
    UNION  ALL
    SELECT arrival.No_elem_fils, '''' + cast(departure.Pred AS VARCHAR(MAX)) + ''', ''' + 
			cast(arrival.No_elem_pere as varchar(max)) + ''''
    FROM   Preseances AS arrival
           INNER JOIN Predecesseurs AS departure
                 ON departure.No_fils = arrival.No_elem_fils
	WHERE  departure.Pred NOT LIKE '%' + arrival.No_elem_pere + '%')
 
SELECT *
FROM   Predecesseurs
WHERE no_fils = '4'
Ceci me donne comme résultat :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
No_fils       Pred
4	            1    
4	            2    
4	            '2    ', '1    '
4	            '1    ', '2    '
Et j'aimerais que ma requête récursive me donne quelque chose comme :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
No_fils       Pred
4	           '1    ', '2    '
Ma table est constituée d'éléments dont chacun (sauf ceux de départ) a des prédecesseurs qui doivent être complétés avant d'arriver à celui-ci. Ma requête récursive me permet de lister ces prédecesseurs.
Alors, aurai-je mal utilisé le principe de récursivité ou mon CTE est-il mal fait ?

Merci d'avance,

Évans