Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

requetes dynamiques dans une procédures stockées

3 réponses
Avatar
Greg
Je souhaite executer une requ=EAte dynamique dans une=20
proc=E9dure stock=E9e et r=E9cup=E9rer une variable de cette=20
requ=EAte pour la r=E9utiliser dans ma proc=E9dure stock=E9e.

ex :=20

set @sql=3D 'select @envoyes=3Dcount(email_campagne.email_id)=20
from email_campagne inner join email on email.email_id=3D=20
email_campagne.email_id '

exec (@sql)


Et je re=E7ois ce message d'erreur :
La variable '@envoyes' doit =EAtre d=E9clar=E9e.
Alors qu'elle est d=E9clar=E9e dans ma proc=E9dure stock=E9e.

En fait je n'arrive pas =E0 r=E9cup=E9rer de variable de mon=20
exec dans la proc=E9dure stock=E9e qui l'utilise.

Avez vous une solution pour r=E9soudre ce pb ou le=20
contourner ???

Merci d'avance=20
Greg

3 réponses

Avatar
jgabillaud
Je pense qu'il est préférable de passer par sp_executesql.
La doc en ligne contient un exemple qui doit vour permettre de résoudre
votre problème

"Greg" a écrit :

Je souhaite executer une requête dynamique dans une
procédure stockée et récupérer une variable de cette
requête pour la réutiliser dans ma procédure stockée.

ex :

set @sql= 'select @envoyes=count(email_campagne.email_id)
from email_campagne inner join email on email.email_id=
email_campagne.email_id '

exec (@sql)


Et je reçois ce message d'erreur :
La variable '@envoyes' doit être déclarée.
Alors qu'elle est déclarée dans ma procédure stockée.

En fait je n'arrive pas à récupérer de variable de mon
exec dans la procédure stockée qui l'utilise.

Avez vous une solution pour résoudre ce pb ou le
contourner ???

Merci d'avance
Greg




Avatar
Laurent MOREAU
Question déja posée il y a 13 jours...

Voici l'excellente réponse de Philippe:


DECLARE @SQLString nvarchar(2000)
DECLARE @ParmDefinition nvarchar(500)
DECLARE @RowCount int

SET @SQLString = 'SELECT @RowCountOUT = count(*) FROM ' + @TableName
SET @ParmDefinition = '@RowCountOUT int OUTPUT'
EXECUTE sp_executesql @SQLString, @ParmDefinition, @RowCount OUTPUT


Laurent.



"Greg" wrote in message
news:18e201c5312c$e4f4aed0$
Je souhaite executer une requête dynamique dans une
procédure stockée et récupérer une variable de cette
requête pour la réutiliser dans ma procédure stockée.

ex :

set @sql= 'select @envoyes=count(email_campagne.email_id)
from email_campagne inner join email on email.email_id email_campagne.email_id '

exec (@sql)


Et je reçois ce message d'erreur :
La variable '@envoyes' doit être déclarée.
Alors qu'elle est déclarée dans ma procédure stockée.

En fait je n'arrive pas à récupérer de variable de mon
exec dans la procédure stockée qui l'utilise.

Avez vous une solution pour résoudre ce pb ou le
contourner ???

Merci d'avance
Greg
Avatar
Philippe T [MS]
Bonjour,

Merci pour le "Excellente réponse" !!! :-)

C'est effectivement je pense la meilleur solution.

----------------------------------------------------------------------
Philippe TROTIN - Microsoft Service France

"Laurent MOREAU" <l.moreau(enleverceci)@systonic.fr> wrote in message
news:d20t35$kus$
Question déja posée il y a 13 jours...

Voici l'excellente réponse de Philippe:


DECLARE @SQLString nvarchar(2000)
DECLARE @ParmDefinition nvarchar(500)
DECLARE @RowCount int

SET @SQLString = 'SELECT @RowCountOUT = count(*) FROM ' + @TableName
SET @ParmDefinition = '@RowCountOUT int OUTPUT'
EXECUTE sp_executesql @SQLString, @ParmDefinition, @RowCount OUTPUT


Laurent.



"Greg" wrote in message
news:18e201c5312c$e4f4aed0$
Je souhaite executer une requête dynamique dans une
procédure stockée et récupérer une variable de cette
requête pour la réutiliser dans ma procédure stockée.

ex :

set @sql= 'select @envoyes=count(email_campagne.email_id)
from email_campagne inner join email on email.email_id > email_campagne.email_id '

exec (@sql)


Et je reçois ce message d'erreur :
La variable '@envoyes' doit être déclarée.
Alors qu'elle est déclarée dans ma procédure stockée.

En fait je n'arrive pas à récupérer de variable de mon
exec dans la procédure stockée qui l'utilise.

Avez vous une solution pour résoudre ce pb ou le
contourner ???

Merci d'avance
Greg