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:
L'affichage de @maVar me donne: '450','452','453','455','454'
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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)
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:
Pourtant l'affichage de @req me donne:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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)
qui me semble être la même chose que la première requête...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT e.NumTrain1 FROM T_MAGISTER_ETAPE as e WHERE e.NumTrain1 in ( '450','452','453','455','454' )
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.
Partager