Devolver datos mediante parámetros OUTPUT
Si especifica la palabra clave OUTPUT para un parámetro en la definición del procedimiento, éste, al salir, podrá devolver el valor actual del parámetro al programa que lo llama. Para guardar el valor del parámetro en una variable que pueda utilizarse en el programa que realiza la llamada, este último debe utilizar la palabra clave OUTPUT para ejecutar el procedimiento almacenado.
Ejemplos
En el ejemplo siguiente se muestra un procedimiento almacenado con un parámetro de entrada y otro de salida. El primer parámetro del procedimiento almacenado @SalesPerson
recibe el valor de entrada especificado por el programa que realiza la llamada, mientras que el segundo parámetro @SalesYTD
se utiliza para devolver el valor a dicho programa. La instrucción SELECT utiliza el parámetro @SalesPerson
para obtener el valor SalesYTD
correcto y asignarlo, a continuación, al parámetro de salida @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
Las instrucciones siguientes ejecutan el procedimiento almacenado con un valor para el parámetro de entrada y guardan el valor de salida del procedimiento en la variable local @SalesYTD
del programa que efectúa la llamada.
-- 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
También es posible especificar los valores de entrada para los parámetros OUTPUT cuando se ejecuta el procedimiento almacenado. Esto permite al procedimiento recibir un valor del programa que realiza la llamada, cambiarlo o realizar operaciones con él, y devolver el nuevo valor al programa. En el ejemplo anterior, es posible asignar un valor a la variable @SalesYTDBySalesPerson
antes de ejecutar el procedimiento almacenado. La variable @SalesYTD
contiene el valor del parámetro en el cuerpo del procedimiento almacenado, y el valor de la variable @SalesYTD
es devuelto al programa que realiza la llamada al finalizar el procedimiento. A esto se le suele denominar "capacidad de paso por referencia".
Si especifica OUTPUT para un parámetro cuando ejecuta un procedimiento almacenado y el parámetro no se define mediante OUTPUT en el procedimiento, se emite un mensaje de error. Puede ejecutar un procedimiento con parámetros OUTPUT y no especificar OUTPUT al ejecutar el procedimiento. No se devuelve ningún error, pero no podrá utilizar el valor de salida en el programa que realiza la llamada.
Vea también
Conceptos
Devolver datos mediante un código de retorno
Usar el tipo de datos cursor en un parámetro OUTPUT
Otros recursos
EXECUTE (Transact-SQL)
Devolver datos de un procedimiento almacenado
DECLARE @local\_variable (Transact-SQL)
PRINT (Transact-SQL)
SET @local\_variable (Transact-SQL)