Restituzione di dati utilizzando i parametri OUTPUT

Se si specifica la parola chiave OUTPUT per un parametro nella definizione della procedura, la stored procedure può restituire il valore corrente del parametro al programma che ha eseguito la chiamata al termine dell'esecuzione della stored procedure stessa. Per salvare il valore del parametro in una variabile che possa essere utilizzata nel programma che ha eseguito la chiamata, tale programma deve inoltre utilizzare la parola chiave OUTPUT durante l'esecuzione della stored procedure.

Esempi

Nell'esempio seguente viene illustrata una stored procedure con un parametro di input e uno di output. Il primo parametro nella stored procedure @SalesPerson riceve il valore di input specificato dal programma che ha eseguito la chiamata e il secondo parametro @SalesYTD viene utilizzato per restituire il valore a tale programma. L'istruzione SELECT utilizza il parametro @SalesPerson per ottenere il valore SalesYTD corretto e assegna il valore al parametro di output @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

Tramite le istruzioni seguenti viene eseguita la stored procedure con un valore per il parametro di input e il valore di output della stored procedure viene salvato nella variabile @SalesYTD locale rispetto al programma che ha eseguito la chiamata.

-- 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

È inoltre possibile specificare valori di input per i parametri OUTPUT quando la stored procedure viene eseguita. Questa operazione consente alla stored procedure di ricevere un valore dal programma che ha eseguito la chiamata, modificarlo o utilizzarlo per eseguire operazioni e quindi restituire il nuovo valore al programma che ha eseguito la chiamata. Nell'esempio precedente è possibile assegnare un valore alla variabile @SalesYTDBySalesPerson prima di eseguire la stored procedure. La variabile @SalesYTD include il valore del parametro nel corpo della stored procedure e il valore della variabile @SalesYTD viene restituito al programma che ha eseguito la chiamata al termine dell'esecuzione della stored procedure. Questa funzionalità viene in genere denominata "funzionalità di passaggio per riferimento".

Se si specifica OUTPUT per un parametro quando si esegue una stored procedure e il parametro non è stato definito utilizzando OUTPUT nella stored procedure, viene restituito un messaggio di errore. È possibile eseguire una stored procedure con i parametri OUTPUT e non specificare OUTPUT in fase di esecuzione della stored procedure. Non viene restituito alcun errore, ma non è possibile utilizzare il valore di output nel programma che ha eseguito la chiamata.