Bonjour à tous,
Suite à la lecture, d'un post, j'ai voulu m'essayer à la rêquete récursive pour récupérer des infos.

J'ai bien lu le tuto mais je n'arrive pas à appliquer.

J'ai une table
Code : Sélectionner tout - Visualiser dans une fenêtre à part
T_DIM_GRANDES_COMPTES (GrandesComptes_Id, EntiteClienteMere_Id, EntiteClienteFille_Id)
et voici mon essai de la requête récursive
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
16
17
18
19
20
21
22
23
24
25
26
27
28
WITH 
   tree (EntiteClienteMere_Id, level, EntiteClienteFille_Id, GrandesComptes_Id, pathstr)
   AS (SELECT 
			EntiteClienteMere_Id
			, 0
			, EntiteClienteFille_Id
			, GrandesComptes_Id
			, CAST('' AS VARCHAR(MAX)) 
		FROM   T_DIM_GRANDES_COMPTES
		WHERE  EntiteClienteMere_Id = 110532 --248372
		UNION ALL
		SELECT 
			V.EntiteClienteMere_Id
			, t.level + 1
			, V.EntiteClienteFille_Id
			, V.GrandesComptes_Id
			, t.pathstr + CAST(V.EntiteClienteMere_Id AS VARCHAR(MAX))
		FROM   T_DIM_GRANDES_COMPTES V
              INNER JOIN tree t
                    ON t.EntiteClienteFille_Id= V.EntiteClienteMere_Id )
SELECT 
	SPACE(level) + EntiteClienteMere_Id AS EntiteClienteMere_Id
	, level
	, EntiteClienteFille_Id
	, GrandesComptes_Id
	, pathstr
FROM   tree
ORDER  BY pathstr, EntiteClienteMere_Id
Si j'utilise un EntiteClienteMere_Id qui n'a que des filles et pas de petites-filles, la requête me retourne bien les filles avec un level = 0

Par contre si j'execute avec un EntiteClienteMere_Id ayant des petites-filles je me retrouve avec l'erreur suivante :
"The statement terminated. The maximum recursion 100 has been exhausted before statement completion."


Or j'ai vérifié avec des requêtes toute simple que la récursion est bonne.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
DROP TABLE #tmpGC1
SELECT GrandesComptes_Id, EntiteClienteMere_Id, EntiteClienteFille_Id
into #tmpGC1
FROM   T_DIM_GRANDES_COMPTES
WHERE  EntiteClienteMere_Id = 110532 --248372
 
select *  from T_DIM_GRANDES_COMPTES
where EntiteClienteMere_Id in (select EntiteClienteFille_Id from #tmpGC1)
	 AND GrandesComptes_Id not in (select GrandesComptes_Id from #tmpGC1)
 
select *  from T_DIM_GRANDES_COMPTES
where EntiteClienteMere_Id in (select EntiteClienteFille_Id from #tmpGC2)
	 AND GrandesComptes_Id not in (select GrandesComptes_Id from #tmpGC2)
Dans le cas de mon EntiteClienteMere_Id, la dernière requêtes ne retourne rien, le nombre de niveau n'est pas donc infini.

Merci à vous pour vos éclaircissements.