SQL Server : concatenation

aieeeuuuuu Messages postés 698 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 20 mai 2011 - 28 avril 2006 à 10:59
aieeeuuuuu Messages postés 698 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 20 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:




EXEC MaProc @param1, 'identifiant : ' + @identifiant




 


seulement cela ne fonctionne pas.


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.


est ce que quelqu'un a déjà eu ce problème ?




merci
A voir également:

8 réponses

cs_fabrice69 Messages postés 1765 Date d'inscription jeudi 12 octobre 2000 Statut Membre Dernière intervention 11 décembre 2013 5
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.

Romelard Fabrice (Alias F___)
0
aieeeuuuuu Messages postés 698 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 20 mai 2011 2
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
0
aieeeuuuuu Messages postés 698 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 20 mai 2011 2
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 :))

rien a faire, ca ne fonctionne pas !
0
Mindiell Messages postés 559 Date d'inscription jeudi 25 juillet 2002 Statut Membre Dernière intervention 5 septembre 2007 1
2 mai 2006 à 11:13
DECLARE @param_final as VARCHAR (255)

@param_final = @param1 + @param2
EXEC MaProc @param_final

Ca devrait marcher, non ?

Mindiell Software
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
aieeeuuuuu Messages postés 698 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 20 mai 2011 2
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.
0
Mindiell Messages postés 559 Date d'inscription jeudi 25 juillet 2002 Statut Membre Dernière intervention 5 septembre 2007 1
2 mai 2006 à 18:34
EXEC MaProc str(@param1 + @param2)

et ca ?

Mindiell Software
0
aieeeuuuuu Messages postés 698 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 20 mai 2011 2
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 !
0
aieeeuuuuu Messages postés 698 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 20 mai 2011 2
3 mai 2006 à 10:12
plus fort encore !

j'ai fait le test suivant :

j'ai créé une fonction qui concaténe les deux parametres en entrée. elle s'appelle concat


quand je fait :



PRINT dbo.concat('A', 'B')



il m'affiche AB

jusque la tout va bien.

quand j'essaie de l'utiliser avec ma proc stock de test plus haut (celle qui fait juste un PRINT de la variable placée en parametre) :

EXEC MaProc dbo.concat('A', 'B')

j'ai encore une erreur :
Line 1: Incorrect syntax near '.'.

et si je ne mets pas le dbo. :
EXEC MaProc concat('A', 'B')

j'ai l'erreur
Line 1: Incorrect syntax near 'A'.

etrange non ?
0