Compartir a través de


Especificar la dirección de un parámetro

La dirección de un parámetro puede ser de entrada, que indica que un valor se pasa al parámetro de entrada de un procedimiento almacenado, o de salida, que indica que el procedimiento almacenado devuelve un valor al programa que lo llama mediante un parámetro de salida. El valor predeterminado es un parámetro de entrada.

Para especificar un parámetro de salida, debe indicar la palabra clave OUTPUT en la definición del parámetro del procedimiento almacenado. El procedimiento almacenado devuelve el valor actual del parámetro de salida al programa que lo llama cuando se abandona el procedimiento almacenado. El programa que realiza la llamada también debe utilizar la palabra clave OUTPUT al ejecutar el procedimiento almacenado, a fin de guardar el valor del parámetro en una variable que se pueda utilizar en el programa que llama. Para obtener más información, vea Devolver datos mediante parámetros OUTPUT.

Ejemplos

El siguiente ejemplo crea el procedimiento almacenado Production.usp_GetList, que devuelve una lista de productos con precios que no superan un importe especificado. El ejemplo muestra la utilización de varias instrucciones SELECT y varios parámetros OUTPUT. Los parámetros OUTPUT permiten a un procedimiento externo, un proceso por lotes o más de una instrucción Transact-SQL tener acceso a un conjunto de valores durante la ejecución del procedimiento.

USE AdventureWorks2008R2;
GO
IF OBJECT_ID ( 'Production.uspGetList', 'P' ) IS NOT NULL 
    DROP PROCEDURE Production.uspGetList;
GO
CREATE PROCEDURE Production.uspGetList @Product varchar(40) 
    , @MaxPrice money 
    , @ComparePrice money OUTPUT
    , @ListPrice money OUT
AS
    SET NOCOUNT ON;
    SELECT p.[Name] AS Product, p.ListPrice AS 'List Price'
    FROM Production.Product AS p
    JOIN Production.ProductSubcategory AS s 
      ON p.ProductSubcategoryID = s.ProductSubcategoryID
    WHERE s.[Name] LIKE @Product AND p.ListPrice < @MaxPrice;
-- Populate the output variable @ListPprice.
SET @ListPrice = (SELECT MAX(p.ListPrice)
        FROM Production.Product AS p
        JOIN  Production.ProductSubcategory AS s 
          ON p.ProductSubcategoryID = s.ProductSubcategoryID
        WHERE s.[Name] LIKE @Product AND p.ListPrice < @MaxPrice);
-- Populate the output variable @compareprice.
SET @ComparePrice = @MaxPrice;
GO

Ejecute usp_GetList para conseguir una lista de productos de Adventure Works (bicicletas) que cuesten menos de 700 $. Los parámetros OUTPUT @cost y @compareprices se utilizan con lenguaje de control de flujo para devolver un mensaje en la ventana Mensajes.

Nota

La variable OUTPUT debe definirse durante la creación del procedimiento, así como durante la utilización de la variable. El nombre del parámetro y de la variable no tienen por qué coincidir. Sin embargo, el tipo de datos y la posición de los parámetros deben coincidir (a menos que se utilice @listprice= variable).

DECLARE @ComparePrice money, @Cost money 
EXECUTE Production.uspGetList '%Bikes%', 700, 
    @ComparePrice OUT, 
    @Cost OUTPUT
IF @Cost <= @ComparePrice 
BEGIN
    PRINT 'These products can be purchased for less than 
    $'+RTRIM(CAST(@ComparePrice AS varchar(20)))+'.'
END
ELSE
    PRINT 'The prices for all products in this category exceed 
    $'+ RTRIM(CAST(@ComparePrice AS varchar(20)))+'.'

Este es el conjunto de resultados parciales:

Product                                            List Price
-------------------------------------------------- ------------------
Road-750 Black, 58                                 539.99
Mountain-500 Silver, 40                            564.99
Mountain-500 Silver, 42                            564.99
...
Road-750 Black, 48                                 539.99
Road-750 Black, 52                                 539.99

(14 row(s) affected)

These items can be purchased for less than $700.00.