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
et voici mon essai de la requête récursive
Code : Sélectionner tout - Visualiser dans une fenêtre à part T_DIM_GRANDES_COMPTES (GrandesComptes_Id, EntiteClienteMere_Id, EntiteClienteFille_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
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
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.
Dans le cas de mon EntiteClienteMere_Id, la dernière requêtes ne retourne rien, le nombre de niveau n'est pas donc infini.
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)
Merci à vous pour vos éclaircissements.
Partager