Bonjour,
J'ai un soucis avec une requête imbriquée dans un FROM. Ca me bloque depuis plusieurs jours donc j'en viens à l'extrémité de vous demander de l'aide. Je préviens je suis débutant en SQL Server et .NET (je suis stagiaire depuis 4 mois et demi).
J'ai 4 tables dont 3 liées par héritage à l'une d'entre elles. Les tables Regle_Produit , Regle_Produit_Hasard , Achat_Groupe qui dérivent de la table Regle .
Les sous-tables possèdent en clé étrangère l'identifiant de la sur-table Regle : id_regle.
Alors j'ai réussi à concevoir une requète, qui me récupère, par rapport à un id_regle spécifié et inscrit dans la table Regle, le nom de la sous-table qui contient cette règle (en détails).
1 2 3 4 5 6 7 8
| select COALESCE(CASE WHEN RP.id_regle_produit is not null then 'ECommerce_CrossV2_Regle_Produit' end, CASE WHEN PH.id_regle_produit_hasard is not null then 'ECommerce_CrossV2_Produit_Hasard' end, case when AG.id_regle_achat_groupe is not null then 'ECommerce_CrossV2_Achat_Groupe' end)
from ECommerce_CrossV2_Regle as R1
LEFT JOIN ECommerce_CrossV2_Regle_Produit as RP ON R1.id_regle = RP.id_regle_produit
LEFT JOIN ECommerce_CrossV2_Regle as R2 ON R1.id_regle = R2.id_regle
LEFT JOIN ECommerce_CrossV2_Produit_Hasard as PH ON R2.id_regle = PH.id_regle_produit_hasard
LEFT JOIN ECommerce_CrossV2_Regle as R3 ON R1.id_regle = R3.id_regle
LEFT JOIN ECommerce_CrossV2_Achat_Groupe as AG ON R3.id_regle = AG.id_regle_achat_groupe
WHERE R1.id_regle = 2; |
Lorsque que je met ce paramètre à 2, cela me retourne bien comme résultat ECommerce_CrossV2_Produit_Hasard
Voila ce que j'aimerais faire et que je n'arrive pas :
select * from (ma grosse requete);
Le résultat de la grosse requête est considéré comme une table et non une chaîne de caractère. Aussi je me retrouve avec comme résultat : ECommerce_CrossV2_Produit_Hasard
alors que je voudrais le contenu de la table ECommerce_CrossV2_Produit_Hasard. Il faudrait donc que je puisse, en SQL, récupérer un contenu de table et l'insérer dans la requête. J'aimerais éviter les procédures stockées ou devoir jongler entre du code CLR et SQL Server, ce qui diminuerait les performances.
J'ai essayé de mettre ma première requête en tant que fonction scalaire retournant un nvarchar(50). Cette fonction fonctionne mais je n'arrive pas à l'invoquer dans le FROM.
Si je fais :
select * from dbo.recherche_table_regle(2);
le compilateur considère que dbo.recherche_table_regle(2) devrait être une table et me renvoit une erreur.
Selon vous, comment faire en sorte de faire une sorte d'évaluation de la fonction avant l'exécution de la requête pour qu'il fasse bien
select * from ECommerce_CrossV2_Produit_Hasard;
Merci d'avance pour votre aide.
Partager