Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/01/2011, 20h09   #1
Invité de passage
 
Inscription : janvier 2011
Messages : 8
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 8
Points : 0
Points : 0
Par défaut [SQL SERVER 2008] Variable dans la clause IN

J'espère que je post dans la bonne section cette fois-ci.
Voici mon petit problème.

J'ai une procédure stocké qui effectue un select bien simple contenant ceci.

Citation:
ALTER PROCEDURE [procedure]
@variable varchar(8000)

...

WHERE table.colonne IN (@variable)
Si @variable contient 123 tout est beau.
Par contre, si @variable contient 123, 456 ça me fait cette erreur:

"Conversion failed when converting the varchar value '123, 456' to data type int."

Pourtant, si je remplace @variable par 123, 456 dans mon code ça fonctionne.

Je suis un peu perdu ici malheureusement...
kh424 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2011, 20h15   #2
Expert Confirmé
 
Avatar de 7gyY9w1ZY6ySRgPeaefZ
 
Homme
dba
Inscription : juillet 2007
Messages : 2 520
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : dba

Informations forums :
Inscription : juillet 2007
Messages : 2 520
Points : 3 967
Points : 3 967
pour faire ça, regarde du côté du sql dynamique !
__________________
les règles du forum - mode d'emploi du forum
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs.
(Rappel : "ça ne marche pas" n'est pas un message d'erreur)
JE NE RÉPONDS PAS aux questions techniques par message privé.
Écrire en français sur un forum est une marque minimale de respect.
7gyY9w1ZY6ySRgPeaefZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2011, 20h21   #3
Invité de passage
 
Inscription : janvier 2011
Messages : 8
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 8
Points : 0
Points : 0
Citation:
Envoyé par 7gyY9w1ZY6ySRgPeaefZ Voir le message
pour faire ça, regarde du côté du sql dynamique !
Donc je me suis encore trompé de section?

kh424 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2011, 21h08   #4
Invité de passage
 
Inscription : janvier 2011
Messages : 8
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 8
Points : 0
Points : 0
J'ai effectué le tout avec ceci et ça fonctionne à merveille:

Code :
1
2
3
4
5
6
DECLARE @x XML
SET @x = '<j>' + REPLACE( @variable, ',', '</j><j>') + '</j>'
 
...   
 
IN(SELECT x.j.value('.', 'INT') AS col1 FROM @x.nodes('//j') x(j)
kh424 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2011, 01h01   #5
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 665
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2005
Messages : 4 665
Points : 8 707
Points : 8 707
Bonjour,

Vous auriez également pu utiliser une expression de table commune comme je l'ai montré ici, ou bien une fonction de type table combinée à l'utilisation de l'opérateur CROSS APPLY

@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h26.


 
 
 
 
Partenaires

Hébergement Web