Condividi tramite


Impostazione della direzione di un parametro

La direzione di un parametro può essere in, ovvero un valore viene passato al parametro di input della stored procedure, o out, ovvero la stored procedure restituisce un valore al programma che esegue la chiamata attraverso un parametro di output. Il parametro di input è l'impostazione predefinita.

Per specificare un parametro di output è necessario includere la parola chiave OUTPUT nella definizione del parametro nella stored procedure. La stored procedure restituisce il valore corrente del parametro di output al programma che esegue la chiamata al termine dell'esecuzione della stored procedure. Il programma che esegue la chiamata deve inoltre utilizzare la parola chiave OUTPUT quando esegue la stored procedure per salvare il valore del parametro in una variabile che è possibile utilizzare nel programma che esegue la chiamata. Per ulteriori informazioni, vedere Restituzione di dati utilizzando i parametri OUTPUT.

Esempi

Nell'esempio seguente viene creata la stored procedure Production.usp_GetList, che restituisce un elenco di prodotti i cui prezzi non superano un determinato importo. Nell'esempio viene illustrato l'utilizzo di più istruzioni SELECT e di più parametri OUTPUT. I parametri OUTPUT consentono a una procedura esterna, a un batch o a più istruzioni Transact-SQL di accedere a un valore impostato durante l'esecuzione della procedura.

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

Eseguire usp_GetList per restituire un elenco di prodotti Adventure Works (biciclette) che costano meno di $ 700. I parametri OUTPUT @cost e @compareprices vengono utilizzati con elementi del linguaggio per il controllo di flusso per restituire un messaggio nella finestra Messaggi.

Nota

La variabile OUTPUT deve essere definita durante la creazione della procedura e durante l'utilizzo della variabile. Il nome del parametro e della variabile non devono corrispondere. Tuttavia, è necessario che corrispondano il tipo di dati e la posizione del parametro (a meno che non sia utilizzato@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)))+'.'

Di seguito è riportato il set di risultati parziale:

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.