Retour de données à l'aide de paramètres OUTPUT

Si vous spécifiez le mot clé OUTPUT pour un paramètre dans la définition de procédure, la procédure stockée peut retourner la valeur actuelle du paramètre au programme appelant lors de la sortie de la procédure. Pour enregistrer la valeur du paramètre dans une variable afin que le programme appelant puisse l'utiliser, ce dernier doit inclure le mot clé OUTPUT lorsqu'il exécute la procédure stockée.

Exemple

L'exemple ci-dessous illustre une procédure stockée avec un paramètre d'entrée et un paramètre de sortie. Le premier paramètre de la procédure, @SalesPerson, recevra la valeur d'entrée spécifiée par le programme appelant tandis que le second paramètre, @SalesYTD, sera utilisé pour retourner la valeur au programme appelant. L'instruction SELECT utilise le paramètre @SalesPerson pour obtenir la valeur correcte SalesYTD et assigne la valeur au paramètre de sortie @SalesYTD.

USE AdventureWorks;
GO
IF OBJECT_ID('Sales.uspGetEmployeeSalesYTD', 'P') IS NOT NULL
    DROP PROCEDURE Sales.uspGetEmployeeSalesYTD;
GO
CREATE PROCEDURE Sales.uspGetEmployeeSalesYTD
@SalesPerson nvarchar(50),
@SalesYTD money OUTPUT
AS  

    SET NOCOUNT ON;
    SELECT @SalesYTD = SalesYTD
    FROM Sales.SalesPerson AS sp
    JOIN HumanResources.vEmployee AS e ON e.EmployeeID = sp.SalesPersonID
    WHERE LastName = @SalesPerson;
RETURN
GO

Les instructions ci-dessous exécutent la procédure stockée avec une valeur pour le paramètre d'entrée, et enregistrent la valeur de sortie de la procédure dans la variable locale @SalesYTD du programme appelant.

-- Declare the variable to receive the output value of the procedure.
DECLARE @SalesYTDBySalesPerson money;
-- Execute the procedure specifying a last name for the input parameter
-- and saving the output value in the variable @SalesYTDBySalesPerson
EXECUTE Sales.uspGetEmployeeSalesYTD
    N'Blythe', @SalesYTD = @SalesYTDBySalesPerson OUTPUT;
-- Display the value returned by the procedure.
PRINT 'Year-to-date sales for this employee is ' + 
    convert(varchar(10),@SalesYTDBySalesPerson);
GO

Des valeurs d'entrée peuvent également être définies pour les paramètres OUTPUT lorsque la procédure stockée est exécutée. Ainsi, la procédure peut recevoir une valeur du programme appelant, la modifier ou l'utiliser pour exécuter des opérations, puis retourner la nouvelle valeur au programme appelant. Dans l'exemple précédent, la variable @SalesYTDBySalesPerson peut recevoir une valeur avant l'exécution de la procédure stockée. La variable @SalesYTD contient la valeur du paramètre dans le corps de la procédure stockée, et la valeur de la variable @SalesYTD est retournée au programme appelant lorsque la procédure est terminée. Ce mécanisme est souvent appelé « capacité de passage par référence ».

Si vous spécifiez OUTPUT pour un paramètre pendant l'exécution d'une procédure stockée alors que le paramètre n'est pas défini avec OUTPUT dans la procédure, vous obtiendrez un message d'erreur. Il est néanmoins possible d'exécuter une procédure stockée avec des paramètres OUTPUT et de ne pas spécifier OUTPUT lors de l'exécution de la procédure. Aucune erreur n'est retournée, mais vous ne pouvez pas utiliser la valeur de sortie dans le programme appelant.

Voir aussi

Concepts

Renvoi de données au moyen d'un code de retour
Utilisation du type de données cursor dans un paramètre OUTPUT

Autres ressources

EXECUTE (Transact-SQL)
Retour de données à partir d'une procédure stockée
DECLARE @local\_variable (Transact-SQL)
PRINT (Transact-SQL)
SET @local\_variable (Transact-SQL)

Aide et Informations

Assistance sur SQL Server 2005