Précédent   Forum du club des développeurs et IT Pro > 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
 
Outils de la discussion
Publicité
'
Vieux 19/12/2012, 10h12   #1
Rudyyyy
Invité régulier
 
Inscription : avril 2009
Messages : 24
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 24
Points : 8
Points : 8
Par défaut Passage de paramètre utilisé dans un "IN"

Bonjour,

j'ai un soucis d'interpretation lorsque je passe une chaine de caractères à une procédure stockée utilisée dans une base SQL-SERVER 2008. Pour mieux comprendre je vous donne l'exemple suivant:

1 - Si dans un premier cas j'utilise directement la requête:

Code :
1
2
3
4
5
6
7
8
9
10
 
DECLARE @maVar VARCHAR(8000)
 
SET @maVar = '''450'',''452'',''453'',''455'',''454'''
 
SELECT  e.NumTrain1
FROM  T_MAGISTER_ETAPE  AS e 
WHERE e.NumTrain1 IN ( @maVar ) 
 
print(@maVar)
L'affichage de @maVar me donne: '450','452','453','455','454'

2 - Si je feinte en stockant ma requête dans une variable de typer VARCHAR et que je l'exécute, ca fonctionne comme je le souhaite:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
DECLARE @req VARCHAR(8000)
DECLARE @maVar VARCHAR(8000)
 
SET @maVar = '''450'',''452'',''453'',''455'',''454'''
 
SET @req = 'SELECT  e.NumTrain1 
FROM  T_MAGISTER_ETAPE  as e   
WHERE e.NumTrain1 in ( ' + @maVar + ' )'
 
print(@req)
exec(@req)
Pourtant l'affichage de @req me donne:

Code :
1
2
3
SELECT  e.NumTrain1 
FROM  T_MAGISTER_ETAPE  AS e   
WHERE e.NumTrain1 IN ( '450','452','453','455','454' )
qui me semble être la même chose que la première requête...

Me viennent alors plusieurs questions... Quelle en est la raison et y a-t-il une façon d'éviter ce problème? Sinon, si je suis contraint d'utiliser la 2e méthode, ce qui en soit ne me dérange pas, j'ai alors un problème de limite de taille. Comme il est impossible d'utiliser le type texte dans ce cas dans ma procédure stockée, la taille de ma requête est limitée aux 8000 caractères du type VARCHAR, ce qu'il m'arrive de dépasser... Je suis un peu bloqué actuellement et cherche une solution. Pour le moment mon programme passe en paramètre une chaîne de caractères, peut-être qu'il faudrait envoyer un tableau plutôt? Merci d'avance de votre aide!!

Rudy.
Rudyyyy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2012, 10h17   #2
serge0934
Membre émérite
 
Homme Serge RUQUET
Consultant informatique
Inscription : août 2006
Messages : 715
Détails du profil
Informations personnelles :
Nom : Homme Serge RUQUET
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Consultant informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : août 2006
Messages : 715
Points : 912
Points : 912
le plus simple est de créer une table temporaire ou tu insères tes valeurs puis tu fais une jointure sur celle ci, c'est plus propre
__________________
Errare humanum est, perseverare diabolicum (Sénèque)
serge0934 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2012, 11h56   #3
darkelend
Membre confirmé
 
Inscription : août 2009
Messages : 210
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 210
Points : 269
Points : 269
ou utiliser une TVP
__________________
http://www.kankuru.fr/blog.aspx
darkelend est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 19/12/2012, 14h42   #4
Kropernic
Membre Expert
 
Avatar de Kropernic
 
Homme
Analyste / Programmeur / DBA
Inscription : juillet 2006
Messages : 1 932
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 30
Localisation : Belgique

Informations professionnelles :
Activité : Analyste / Programmeur / DBA
Secteur : Distribution

Informations forums :
Inscription : juillet 2006
Messages : 1 932
Points : 1 466
Points : 1 466
Gros +1 pour le TVP !

N.B. : TVP = Table Valued Parameter
__________________
Kropernic (anciennement Griftou).
Kropernic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2012, 17h33   #5
Rudyyyy
Invité régulier
 
Inscription : avril 2009
Messages : 24
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 24
Points : 8
Points : 8
Ok merci de vos réponses je regarde ça immédiatement!
Rudyyyy est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 13h03.


 
 
 
 
Partenaires

Hébergement Web