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.