Procedure stockee passage nom table en parametre(concatenation)

Résolu
yankele Messages postés 3 Date d'inscription jeudi 19 août 2004 Statut Membre Dernière intervention 8 juillet 2008 - 7 juil. 2008 à 14:22
roserose5000 Messages postés 17 Date d'inscription samedi 11 février 2006 Statut Membre Dernière intervention 5 novembre 2008 - 23 oct. 2008 à 10:17
Bonjour,

je souhaite creer une procedure stockée dont un parametre est concatene avec le nom de la table, j'ai retourne le probleme dans tous les sens sans succès pour le moment.
Si quelqu'un a une idée merci d'avance.
Voila la procédure en question :
ALTER

PROCEDURE [GLF\PLEMAITRE]
.
[P_INT105_CHEK_NO_DOC] @OWNER

char(6
)=
'RI2DTA',
@NUM_FACT

char(8
) =
NULL,
@OUTPUT

int
OUTPUT
AS

BEGIN

SET

NOCOUNT
ON;
Declare

@requete
char(200
)
SET

NOCOUNT
ON;
Set

@requete
=
'SELECT count(*) FROM '
+
LTRIM(RTRIM(@OWNER
))
+
'.F0911Z1 WHERE VNR1 = '''
+ @NUM_FACT
+
''' AND VNEDUS LIKE ''INT105%''';
Set

@OUTPUT
=
''''
+
SUBSTRING(LTRIM(RTRIM(@requete
)), 1
,
LEN(LTRIM(RTRIM(@requete
)))
-1
)
+
''''
;
 

END

Lors de l'execution cote VB => erreur lors de la conversion du varchar "SELECT count(*) ..."  to data type int

7 réponses

roserose5000 Messages postés 17 Date d'inscription samedi 11 février 2006 Statut Membre Dernière intervention 5 novembre 2008
23 oct. 2008 à 10:17
C'est bon j'ai trouvé ! c'est mon variable @SQL qui n'etait pas assez long, du coup ca coupais ma requête !
Merci !!!
3
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
7 juil. 2008 à 14:57
Salut,

Peux-tu expliqué un peu plus le problème.

Ton parametre inout n'est pas typé est-ce normal.

Tu n'executes pas la requete? (est-ce normal)

Si l'erreur est du coté vb ca serait interressant d'avoir ta methode qui plante.

NB : les parametres out sont renseigné apres la fermeture de la connexion.

Esperant que ca te guide.
0
yankele Messages postés 3 Date d'inscription jeudi 19 août 2004 Statut Membre Dernière intervention 8 juillet 2008
8 juil. 2008 à 10:28
Salut,
merci pour ta réponse.

J'ai solutionné mon problème comme ceci :

ALTER

PROCEDURE [GLF\PLEMAITRE]
.[P_INT105_RG4] @OWN_FU_CTL

char(5
)
=
NULL,@NUMCPT

char(3
)
=
NULLAS

BEGIN

SET
NOCOUNT
ON;

Declare @requete
char(200
);

Set @requete
=
'SELECT COUNT(*) AS NB FROM '
+ @OWN_FU_CTL
+'.F0005 WHERE DRSY ''58'' AND DRRT ''A1'' AND LTRIM(DRKY) ='''
+ @NUMCPT
+
'''';

execute
(@requete
);END

Mais j'ai abandonné l'idée de récupérer le résultat de => execute(@requete dans un paramètre de retour (qui était @OUTPUT int OUT).
Je ne sais pas faire, si tu as une idée je suis preneur.
Merci encore pour les infos. 
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
8 juil. 2008 à 14:33
Tu as la meilleure solution a mon avis.

Tu peux meme faire du multiresultset dans la procédure stockée
--> n select qui sont retournée

Pour recuperer les parametres en output, il faut fermer la connexion et les recuperer apres.

Il faut au maximum eviter de faire du SQL à la volée comme tu fais. (probleme d'injection sql
de performance (pb de plan d'excution car la requete n'est pas fixe)

mais je n'ais pas d'idée pour solutionner plus le probleme

Voila.
0

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

Posez votre question
roserose5000 Messages postés 17 Date d'inscription samedi 11 février 2006 Statut Membre Dernière intervention 5 novembre 2008
22 oct. 2008 à 14:48
Bonjour,

J'ai un problème un peu similaire.

voici ma requête dans ma procédure stockée.
Declare @quantite_lot char(50)
DECLARE @SQL char(200)

SET @SQL = 'INSERT INTO dbo.Company1 SELECT  company_id, Rn_Descriptor, DUNS FROM company
WHERE duns in (SELECT top '+ @QUANTITE_LOT +'duns FROM company GROUP BY duns HAVING count(*) > '1' and
duns is not null) ORDER BY duns, company_id'


 


Exec (@SQL)

une fois que  j'execute , il me dit que il y a un probleme de syntax


 


 


Merci d'avance si vous avez une idée?






 
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
22 oct. 2008 à 19:09
Salut

Evite de mettre des posts à la fin des anciens posts si tu veux avoir des réponses.

Il manque un espace.

Tu aurais testé ta requete en direct tu l'aurais trouvé

print @SQL

top '+ @QUANTITE_LOT +'[ESPACE]duns

Bon coding
0
roserose5000 Messages postés 17 Date d'inscription samedi 11 février 2006 Statut Membre Dernière intervention 5 novembre 2008
23 oct. 2008 à 10:05
Merci de ta réponse.
Mais je l'ai bien testé un peu dans tout les sens.
J'ai plutot l'impression que c'est un problemede quote
il ne reconnais pas le reste de la requete apres [mailto:le@QUANTITE_LOT' le QUANTITE_LOT + '] 
0
Rejoignez-nous