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

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

3 réponses
Avatar
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.

3 réponses

Avatar
Steph
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
Avatar
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 ! :-)
Avatar
Test recherche
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" a écrit dans le message de news:

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 ! :-)