Bonjour,
j'ai un soucis de requête récursive.
Voici ce que je cherche à faire :
Récupérer tous les accessoires, sous-accessoires ... des produits

Voici mes tables :
Produit (IdProduit, IdGroupeAccessoire)
GroupeAccessoire (IdGroupeAccessoire)
ProduitGroupeAccessoire(IdProduitGroupeAccessoire, IdProduit, IdGroupeAccessoire)

En gros un produit à un groupe d'accessoires qui sont également des produits, et ces produits peuvent également avoir des groupes d'accessoires et ainsi de suite ...

Voici mon message d'erreur :
Msg*530, Niveau*16, État*1, Ligne*1
L'instruction a été terminée. La récursivité maximale 100 a été épuisée avant la fin de l'instruction.
Voici mon code :
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
WITH 
   tree (IdProduitPrincipal, IdGroupeAccessoire, IdProduitAcc)
	as (
		select p.IdProduit as IdProduitPrincipal, p.IdGroupeAccessoire, pga.IdProduit as IdProduitAcc
		from Produit p
		join GroupeAccessoire ga on ga.IdGroupeAccessoire = p.IdGroupeAccessoire
		join ProduitGroupeAccessoire pga on pga.IdGroupeAccessoire = ga.IdGroupeAccessoire
		--where p.IdProduit = 865
 
		UNION ALL
 
		select p.IdProduit, p.IdGroupeAccessoire, pga.IdProduit as IdProduitAcc
		from produit p
		join GroupeAccessoire ga on ga.IdGroupeAccessoire = p.IdGroupeAccessoire
		join ProduitGroupeAccessoire pga on pga.IdGroupeAccessoire = ga.IdGroupeAccessoire
		join tree t on t.IdProduitAcc = p.IdProduit 
	)
 
	select * from tree
	order by IdProduitPrincipal
	--OPTION (MAXRECURSION 100)
;
Par contre si j'enlève le commentaire (where p.IdProduit = 865) pour un IdProduit donné, cette requête fonctionne.

Que dois je faire, je ne comprends pas l'erreur !