[SQL2K5]les requête recursives
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:
T_DIM_GRANDES_COMPTES (GrandesComptes_Id, EntiteClienteMere_Id, EntiteClienteFille_Id)
et voici mon essai de la requête récursive
Code:
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:
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.