J'ai besoin d'écrire une requête qui appelle une requête récursive plusieurs fois.Comment utiliser une requête récursive en tant que sous-requête?
Je n'étais pas capable de comprendre comment faire. Je suppose que je peux le faire en utilisant un curseur, en préparant l'instruction sql à l'exécution, puis en utilisant EXEC (mySQLstatement) pour l'exécuter à chaque curseur FETCH NEXT.
De toute façon ce n'est pas la bonne approche.
C'est le problème (bien sûr ici il est simplifié et je ne laisse que les colonnes nécessaires pour m'exprimer): J'ai un arbre de clients (une hiérarchie) et pour chaque client il y a des contacts définis.
La table CUSTOMERS contient un champ ID_CUSTOMER et un champ ID_PARENT_CUSTOMER la table CUSTOMER_CONTACTS contient un champ ID_CUSTOMER et un champ ID_CONTACT.
Avec cette requête (cela fonctionne) je suis en mesure d'obtenir tous les contacts pour le client 308 et tous les contacts pour ses sous-clients:
with [CTE] as (
select ID_CUSTOMER from CUSTOMERS c where c.ID_CUSTOMER = 308
union all
select c.ID_CUSTOMER from [CTE] p, CUSTOMERS c
where c.ID_PARENT_CUSTOMER = p.ID_CUSTOMER
)
select ID_CUSTOMER into #Customer308AndSubCustomers from [CTE]
select 308 as ParentCustomer, ID_CUSTOMER, ID_CONTACT, from CUSTOMER_CONTACTS
WHERE ID_CUSTOMER IN (select * from #Customer308AndSubCustomers)
drop table #Customer308AndSubCustomers
Mais je voudrais avoir dans une seule requête la même pour TOUS LES CLIENTS, pas seulement pour 308. Voilà pourquoi je suggérais d'utiliser un curseur pour que je puisse réutiliser l'instruction ci-dessus et utiliser une variable au lieu de 308.
Mais pouvez-vous suggérer une meilleure requête?
oui oui oui oui oui! C'est le premier jour pour moi avec des requêtes récursives, je ne suis pas encore dedans. Merci beaucoup, cela a résolu mon problème! – LaBracca