Récupérer une valeur de retour en sortie d'un EXEC

Le
WonderMan
Bonjour,

J'appelle une fonction de la manière suivante :


DECLARE @sSql as nvarchar(300)
DECLARE @reponse as int

SET @sSql = '['
SET @sSql = @sSql + @SystemName
SET @sSql = @sSql + '].'
SET @sSql = @sSql + @CatalogName
SET @sSql = @sSql + '.dbo.MAFONCTION '
SET @sSql = @sSql + CAST(@arg1 as VARCHAR(10))
SET @sSql = @sSql + ','
SET @sSql = @sSql + CAST(@arg2 as VARCHAR(10))

exec @reponse = sp_executesql @sSql

(MAFONCTION est une fonction située sur un autrre serveur, qui retourne
un entier. Son fonctionnement a été testé).

Le problème est que la valeur de @reponse est toujours 0, alors que la
fonction devrait retourner 32.
Il semble donc que la valeur renvoyée par MAFONCTION reste à
l'intérieur du contexte d'exécution de EXEC, et que je ne récupère dans
@reponse que la valeur de retour de EXEC.

Alors comment puis je récupérer en sortie de EXEC la valeur retournée
par MAFONCTION ?

Merci de vos conseils.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Steph
Le #11880281
WonderMan wrote:
Bonjour,

J'appelle une fonction de la manière suivante :


DECLARE @sSql as nvarchar(300)
DECLARE @reponse as int

SET @sSql = '['
SET @sSql = @sSql + @SystemName
SET @sSql = @sSql + '].'
SET @sSql = @sSql + @CatalogName
SET @sSql = @sSql + '.dbo.MAFONCTION '
SET @sSql = @sSql + CAST(@arg1 as VARCHAR(10))
SET @sSql = @sSql + ','
SET @sSql = @sSql + CAST(@arg2 as VARCHAR(10))

exec @reponse = sp_executesql @sSql

(MAFONCTION est une fonction située sur un autrre serveur, qui retourne
un entier. Son fonctionnement a été testé).

Le problème est que la valeur de @reponse est toujours 0, alors que la
fonction devrait retourner 32.
Il semble donc que la valeur renvoyée par MAFONCTION reste à l'intérieur
du contexte d'exécution de EXEC, et que je ne récupère dans @reponse que
la valeur de retour de EXEC.

Alors comment puis je récupérer en sortie de EXEC la valeur retournée
par MAFONCTION ?

Merci de vos conseils.




en fait il te faut passer une variable qui sera initialiser et retourné
par ta fonction :

sp_executesql @sSql, @reponse

et dans ta fonction :

ALTER PROCEDURE [dbo].[executesql]
@SQL varchar(4000) = '',
@reponse int OUTPUT
AS
BEGIN

ton code
SET @reponse = ?? @@ROWCOUNT ??
END
WonderMan
Le #11880251
Steph avait soumis l'idée :
WonderMan wrote:
Bonjour,

J'appelle une fonction de la manière suivante :


DECLARE @sSql as nvarchar(300)
DECLARE @reponse as int

SET @sSql = '['
SET @sSql = @sSql + @SystemName
SET @sSql = @sSql + '].'
SET @sSql = @sSql + @CatalogName
SET @sSql = @sSql + '.dbo.MAFONCTION '
SET @sSql = @sSql + CAST(@arg1 as VARCHAR(10))
SET @sSql = @sSql + ','
SET @sSql = @sSql + CAST(@arg2 as VARCHAR(10))

exec @reponse = sp_executesql @sSql

(MAFONCTION est une fonction située sur un autrre serveur, qui retourne un
entier. Son fonctionnement a été testé).

Le problème est que la valeur de @reponse est toujours 0, alors que la
fonction devrait retourner 32.
Il semble donc que la valeur renvoyée par MAFONCTION reste à l'intérieur du
contexte d'exécution de EXEC, et que je ne récupère dans @reponse que la
valeur de retour de EXEC.

Alors comment puis je récupérer en sortie de EXEC la valeur retournée par
MAFONCTION ?

Merci de vos conseils.




en fait il te faut passer une variable qui sera initialiser et retourné par
ta fonction :

sp_executesql @sSql, @reponse

et dans ta fonction :

ALTER PROCEDURE [dbo].[executesql]
@SQL varchar(4000) = '',
@reponse int OUTPUT
AS
BEGIN

ton code
SET @reponse = ?? @@ROWCOUNT ??
END



Merci pour la réponse. J'ai essayé cette solution mais ça ne fonctionne
pas encore très bien. Je persévère dans mes recherches ! :-)
Test recherche
Le #11880021
Bonjour,
Essaie cela
DECLARE @sSql as nvarchar(300)
DECLARE @reponse as int
Declare @l_ParmDefinition varchar (100)

Set @reponse = 0

SET @sSql = 'Select @reponse = ['
SET @sSql = @sSql + @SystemName
SET @sSql = @sSql + '].'
SET @sSql = @sSql + @CatalogName
SET @sSql = @sSql + '.dbo.MAFONCTION '
SET @sSql = @sSql + CAST(@arg1 as VARCHAR(10))
SET @sSql = @sSql + ','
SET @sSql = @sSql + CAST(@arg2 as VARCHAR(10))

Set @l_ParmDefinition = '@reponse int'

exec @reponse = sp_executesql @sSql,
@l_ParmDefinition,
@reponse = @reponse

Ta variable devrait contenir ta valeur
Cordialement
Stéphane


"WonderMan"
Steph avait soumis l'idée :
WonderMan wrote:
Bonjour,

J'appelle une fonction de la manière suivante :


DECLARE @sSql as nvarchar(300)
DECLARE @reponse as int

SET @sSql = '['
SET @sSql = @sSql + @SystemName
SET @sSql = @sSql + '].'
SET @sSql = @sSql + @CatalogName
SET @sSql = @sSql + '.dbo.MAFONCTION '
SET @sSql = @sSql + CAST(@arg1 as VARCHAR(10))
SET @sSql = @sSql + ','
SET @sSql = @sSql + CAST(@arg2 as VARCHAR(10))

exec @reponse = sp_executesql @sSql

(MAFONCTION est une fonction située sur un autrre serveur, qui retourne
un entier. Son fonctionnement a été testé).

Le problème est que la valeur de @reponse est toujours 0, alors que la
fonction devrait retourner 32.
Il semble donc que la valeur renvoyée par MAFONCTION reste à l'intérieur
du contexte d'exécution de EXEC, et que je ne récupère dans @reponse que
la valeur de retour de EXEC.

Alors comment puis je récupérer en sortie de EXEC la valeur retournée
par MAFONCTION ?

Merci de vos conseils.




en fait il te faut passer une variable qui sera initialiser et retourné
par ta fonction :

sp_executesql @sSql, @reponse

et dans ta fonction :

ALTER PROCEDURE [dbo].[executesql]
@SQL varchar(4000) = '',
@reponse int OUTPUT
AS
BEGIN

ton code
SET @reponse = ?? @@ROWCOUNT ??
END



Merci pour la réponse. J'ai essayé cette solution mais ça ne fonctionne
pas encore très bien. Je persévère dans mes recherches ! :-)




Publicité
Poster une réponse
Anonyme