Retornando dados por meio de parâmetros OUTPUT
Caso a palavra-chave OUTPUT seja especificada para um parâmetro na definição do procedimento, o procedimento armazenado poderá retornar o valor atual do parâmetro para o programa de chamada, na saída do procedimento armazenado. Para salvar o valor do parâmetro na variável que poderá ser usada no programa de chamada, o programa de chamada precisará usar a palavra-chave OUTPUT ao executar o procedimento armazenado.
Exemplos
O exemplo a seguir mostra um procedimento armazenado com parâmetros de entrada e de saída. O primeiro parâmetro no procedimento armazenado @SalesPerson recebe o valor de entrada especificado pelo programa de chamada, e o segundo parâmetro @SalesYTD é usado para retornar o valor do programa de chamada. A instrução SELECT usa o parâmetro @SalesPerson para obter o valor correto de SalesYTD, atribuindo o valor ao parâmetro de saída @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
As instruções a seguir executam o procedimento armazenado com um valor para o parâmetro de entrada e salva o valor de saída do procedimento armazenado na variável local @SalesYTD para o programa de chamada.
-- 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
Valores de entrada também podem ser especificados para parâmetros OUTPUT quando o procedimento armazenado é executado. Isso permite que o procedimento armazenado receba um valor do programa de chamada, altere-o ou realize operações com ele e, em seguida, retorne o novo valor para o programa de chamada. No exemplo anterior, pode ser atribuído um valor à variável @SalesYTDBySalesPerson antes da execução do procedimento armazenado. A variável @SalesYTD contém o valor do parâmetro no corpo do procedimento armazenado, e o valor da variável @SalesYTD é retornado para o programa de chamada na saída do procedimento armazenado. Isto é denominado freqüentemente como "capacidade de passagem-por-referência".
Quando OUTPUT é especificado para um parâmetro durante a execução de um procedimento armazenado, e o parâmetro não está definido com OUTPUT no procedimento armazenado, uma mensagem de erro é exibida. É possível executar um procedimento armazenado com parâmetros OUTPUT e não especificar OUTPUT ao executar o procedimento armazenado. Uma mensagem de erro é exibida, mas não se pode usar valor de saída no programa de chamada.
Consulte também