Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1804 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL SERVER]Requête n'acceptant pas une variable

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[SQL SERVER]Requête n'acceptant pas une variable

n°1419428
Manu la Sc​ience
...la science ... pas toujours
Posté le 04-08-2006 à 09:34:40  profilanswer
 

Bonjour à tous,
 
Je suis coincé sur une pauvre requête qui n'accepte pas une variable dans une proc stock.
 
Je fais un SELECT et je veux mettre une variable dans un IN, la variable étant construite pour mettre toutes les valeurs à comparer entre côtes, séparées par des virgules.
Si je mets la requête SELECT dans une variable et exécute cette variable, la requête est bien exécutée.
Mais, je suis plus viscieux car je ne veux pas afficher un tableau, mais concaténer les valeurs du tableau dans une variable, chose que j'ai déjà fait ailleurs. En stockant la requête dans une variable, j'aurai des soucis pour la déclaration de la variable récupérant et concaténant les valeurs du tableau.
 
Je vous mets le code :  
 

Code :
  1. declare @AMM varchar(1000)
  2. declare @SQL varchar(8000)
  3. declare @liste_MA varchar(1000)
  4. set @liste_MA = ''
  5. set @AMM = ''
  6. set @AMM = '''' + left(@liste_AMM, 7) + ''''
  7. WHILE(len(@liste_AMM)>7)
  8. begin
  9. set @liste_AMM = right(@liste_AMM, len(@liste_AMM)-8)
  10. set @AMM = @AMM + ', ''' + left(@liste_AMM, 7) + ''''
  11. end
  12. SELECT @liste_MA=@liste_MA + COALESCE(cast(tbl1.champ1 as varchar(50)) + ''', ''','') FROM tbl1 INNER JOIN tbl2 INNER JOIN tbl3 ON tbl2.ID_PRO = tbl3.ID INNER JOIN tbl4 ON tbl2.ID_MAT = tbl4.ID ON  tbl1.ID = tbl4.ID_FAM WHERE (tbl3.PRO_AMM IN (@AMM))


 
J'ai entouré là où cela me pose problème... J'ai cherché une fonction pour essayer d'injecter le texte de la variable @AMM en vain.
 
Savez-vous comment je peux procéder ? Dans ma procédure stockée, je devrai utiliser la valeur de la variable @liste_MA après... Dois-je la découper en plusieurs proc stock ou puis-je la faire en une seule ?
 
Le champ PRO_AMM de la table 3 est un champ varchar(10) si cela peut aider...
 
Merci de vos réponses  :jap:


Message édité par Manu la Science le 04-08-2006 à 09:58:41

---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
mood
Publicité
Posté le 04-08-2006 à 09:34:40  profilanswer
 

n°1419502
Manu la Sc​ience
...la science ... pas toujours
Posté le 04-08-2006 à 11:07:35  profilanswer
 

C'est ici que cela ne va pas : "WHERE (tbl3.PRO_AMM IN (@AMM)) "
 
la variable @AMM stocke bien les bonnes valeurs, si j'exécute la requête en ligne de commande ca passe nickel, si je stocke la requête dans une variable en mettant ...WHERE (tbl3.PRO_AMM IN (' + @AMM + '))', et que j'exécute la requete (sans la concaténation après le select) ca passe aussi nickel.
 
Mais c'est l'exécution directe qui pose problème car la requête ne récupère pas la chaîne texte de la variable @AMM...
 
Comment dois-je faire ?


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
n°1419864
Arjuna
Aircraft Ident.: F-MBSD
Posté le 04-08-2006 à 16:40:51  profilanswer
 

crée une table temporaire avec un seul champ de type varchar dedans
 
dans ta boucle, à chaque occurence, fait un insert du "mot" dans cette table
ensuite, dans ta requête, utilise une jointure avec cette table temporaire.

n°1421555
Manu la Sc​ience
...la science ... pas toujours
Posté le 07-08-2006 à 15:16:10  profilanswer
 

Merci Arjuna, je l'ai fait et ca marche très bien comme cela. Les perf n'en seront que meilleures car je ne passerais pas par un "IN".
 
Merci encore


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL SERVER]Requête n'acceptant pas une variable

 

Sujets relatifs
requete multiple PHP SQL : besoin coup de main urgentSQL Comment ordonner une requete multiple
Pl/Sql et DBMS_JOBrequete sur champs vide
SQL Server 2000 et Visual Studio 2003%TYPE d'ORACLE en SQL SERVER
Plus de sujets relatifs à : [SQL SERVER]Requête n'acceptant pas une variable


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR