aieeeuuuuu
Messages postés698Date d'inscriptionjeudi 16 janvier 2003StatutMembreDernière intervention20 mai 2011
-
28 avril 2006 à 10:59
aieeeuuuuu
Messages postés698Date d'inscriptionjeudi 16 janvier 2003StatutMembreDernière intervention20 mai 2011
-
3 mai 2006 à 10:12
Bonjour,
Je suis sous SQL server 2000, j'ai fait une procédure stockée qui prend deux paramétres.
dans une autre procédure stockée, je veux appeler la première, avec en deuxième parametre la concatenation d'un texte et d'une variable:
j'y arrive en passant par une variable temporaire:
@temp = 'identifiant : ' + @identifiant
EXEC MaProc @Param1, @temp
cela ne pose aucun problème.
etrange quand meme !
actuellement c'est comme ca que je fait, mais comme je dois appeler plusieurs fois de suite cette procédure, je trouve ca beaucoup plus propre et surtout plus lisible de l'appeler directement plutot que d'utiliser la variable temporaire.
cs_fabrice69
Messages postés1765Date d'inscriptionjeudi 12 octobre 2000StatutMembreDernière intervention11 décembre 20135 28 avril 2006 à 11:49
Pour concaténer des variables (donc en chaine de charactere), il faut déja transformer ces données en varchar, sinon le "+" est aussi utilisé pour des calculs, ce qui lui pose problème.
aieeeuuuuu
Messages postés698Date d'inscriptionjeudi 16 janvier 2003StatutMembreDernière intervention20 mai 20113 28 avril 2006 à 14:22
oui, mais la il s'agit deux VARCHAR.
j'ai essayé pour etre sur avec CAST(...) mais rien n'y fait.
et plus etrange, quand je passe par la variable temporaire, la concatenation se passe tres bien. c'est ca que je ne comprend pas !
j'ai aussi essayé de mettre toute ma concatenation entre parenthese pour bien faire comprendre au systeme qu'il s'agit du deuxieme parametre :
EXEC MaProc @Param1, ('identifiant :' + CAST(@Identifiant AS VARCHAR(20)) ne fonctionne pas non plus
aieeeuuuuu
Messages postés698Date d'inscriptionjeudi 16 janvier 2003StatutMembreDernière intervention20 mai 20113 28 avril 2006 à 15:22
en fait j'ai fait le test suivant :
j'ai créé uneprocédure stockée
CREATE PROCEDURE MaProc
(@param AS VARCHAR(256))
AS
PRINT @param
GO
ensuite sous query analyser, je lance
EXEC MaProc 'A' + 'B'
ca devrait m'afficher AB, mais a la place de cela, j'ai l'erreur :
Line 1: Incorrect syntax near '+'.
C'est quoi ce delire. SQL Server n'est pas capable de concatener a la volée, on est obligé dans ce cas la depasser par une variable temporaire pour concaterner et appeler ensuite la procédure stockée ?
et pourtant j'ai essayé tout ce qui me passait par la tete pour pouvoir faire ca en une seule ligne :
mettre entre parenthses
entre crochets (on sait jamais :))
aieeeuuuuu
Messages postés698Date d'inscriptionjeudi 16 janvier 2003StatutMembreDernière intervention20 mai 20113 2 mai 2006 à 12:02
oui, comme ca ca fonctionne, mais justement je voudrais eviter de passer par une ligne intermediaire.
en fait, j'utilise une procédure stockée pour ajouter des données qui serviront ensuite a générer le corps d'un mail.
ce mail contient des info sur une commande (numero, quantité)
j'appelle la procédure une fois par ligne dans le mail.
donc en gros une vingtaine de fois.
c'est pour ca que je voulais pouvoir tout faire d'un seul coup, pour que tout soit plus lisible.
j'ai effectivement la solution de secours de passer par une ligne intermediaire pour concaténer, mais ca devient tres lourd a lire par la suite. c'est pourquoi je cherchais a comprendre, car la en plus il y a quelque chose qui m'echappe : je ne comprend pas pourquoi ca ne fonctionne pas en concatenant directement.
aieeeuuuuu
Messages postés698Date d'inscriptionjeudi 16 janvier 2003StatutMembreDernière intervention20 mai 20113 3 mai 2006 à 10:06
je n'avais pas essayé, mais ca ne fonctionne pas non plus :
j'ai une erreur de syntaxe.
j'avais essayé avec CAST(...) mais ca ne fonctionne pas mieux !
le pire c'est que je ne trouve pas grand chose sur le net qui parle de concaténation de ce type. a chaque fois il s'agit de concaténation de type
SET @param = 'A' + 'B' mais pas de concaténation directe dans l'appel d'une proc stock.
le suspens persiste.
pour le moment, j'ai de toute facon utilisé la solution de secours, c'est a dire en passant par une varaible temporaire, mais tetu comme je suis il va falloir que je trouve une explication a tout ca !