OVH Cloud OVH Cloud

Problème sur la clause "IN"

4 réponses
Avatar
Oriane
Bonjour =E0 tous,

un de mes coll=E8gues ne trouve pas de solution =E0 un probl=E8me =
pourtant apparemment simple: il construit une liste de chaine de =
caract=E8res afin de la passer en argument =E0 une instruction SQL qui =
comporte une clause IN.=20

Du genre SELECT * FROM table WHERE couleur IN @param.

Le param est un Varchar, et au niveau du code (C#), il passe une string =
du " genre 'rouge', 'bleu', vert' ", =E0 savoir des chaines entour=E9es =
de quote, s=E9par=E9es par virgules (selon la syntaxe sql).

Mais voil=E0 quand on trace au niveau de Sql Server, on se rend compte =
que l'instruction SELECT arrive avec ceci:

SELECT * from table WHERE couleur IN "rouge", "bleu", "vert".

Autrement dit une seconde quote double la premi=E8re.

Et bien s=FBr ca ne marche pas...

Des id=E9es ?

Merci

4 réponses

Avatar
TedIF
Oriane a formulé ce jeudi :

SELECT * from table WHERE couleur IN "rouge", "bleu", "vert".




Il manque des parentèses :

SELECT * from table WHERE couleur IN ('rouge', 'bleu', 'vert')

--

Dominique
Avatar
Oriane
"TedIF" a écrit dans le message de news:
Oriane a formulé ce jeudi :

SELECT * from table WHERE couleur IN "rouge", "bleu", "vert".




Il manque des parentèses :

SELECT * from table WHERE couleur IN ('rouge', 'bleu', 'vert')



Oui elles y sont bien dans le code, mais ce n'est pas cela le pb.

Merci
Avatar
Patrice
Il existe plusieurs solutions selon les contraintes notamment :
- utiliser une fonction pour découper les valeurs : découper le paramètre
VARCHAR par exemple avec une fonction retournant une table ce qui permet
ensuite d'utiliser le IN (par exemple
http://www.windowsitpro.com/Files/09/21071/Listing_01.txt)
- passer les valeurs séparemment : utiliser des paramètres @v1,@v2 etc
selon le nombre voulue
- SQL dynamique : construire la chaine SQL dans une variable et l'exécuter
via EXECUTE
- et sans doute d'autres...

Le problème est que @param est *une* variable. Donc mettre des "valeurs"
séparées par des virgules dans cette variable ne sera pas la même chose que
de comparer par rapport à une liste de (plusieurs) valeurs...


Patrice




--

"Oriane" a écrit dans le message de
news:d8rmlp$f5i$

"TedIF" a écrit dans le message de news:

Oriane a formulé ce jeudi :

SELECT * from table WHERE couleur IN "rouge", "bleu", "vert".




Il manque des parentèses :

SELECT * from table WHERE couleur IN ('rouge', 'bleu', 'vert')



Oui elles y sont bien dans le code, mais ce n'est pas cela le pb.

Merci
Avatar
Damien
Passe par une table temporaire ou utilise la fonction EXECUTE :)