SQL Server : concatenation

Signaler
Messages postés
698
Date d'inscription
jeudi 16 janvier 2003
Statut
Membre
Dernière intervention
20 mai 2011
-
aieeeuuuuu
Messages postés
698
Date d'inscription
jeudi 16 janvier 2003
Statut
Membre
Dernière intervention
20 mai 2011
-
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

8 réponses

Messages postés
1765
Date d'inscription
jeudi 12 octobre 2000
Statut
Modérateur
Dernière intervention
11 décembre 2013
4
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___)
Messages postés
698
Date d'inscription
jeudi 16 janvier 2003
Statut
Membre
Dernière intervention
20 mai 2011
2
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
Messages postés
698
Date d'inscription
jeudi 16 janvier 2003
Statut
Membre
Dernière intervention
20 mai 2011
2
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 !
Messages postés
559
Date d'inscription
jeudi 25 juillet 2002
Statut
Membre
Dernière intervention
5 septembre 2007
1
DECLARE @param_final as VARCHAR (255)

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

Ca devrait marcher, non ?

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

et ca ?

Mindiell Software
Messages postés
698
Date d'inscription
jeudi 16 janvier 2003
Statut
Membre
Dernière intervention
20 mai 2011
2
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 !
Messages postés
698
Date d'inscription
jeudi 16 janvier 2003
Statut
Membre
Dernière intervention
20 mai 2011
2
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 ?