Freigeben über


Zurückgeben von Daten mithilfe von OUTPUT-Parametern

Wenn Sie in der Prozedurdefinition für einen Parameter das OUTPUT-Schlüsselwort angeben, kann die gespeicherte Prozedur den aktuellen Wert des Parameters an das aufrufende Programm zurückgeben, wenn die gespeicherte Prozedur beendet wird. Um den Wert des Parameters in einer Variablen zu speichern, die in dem aufrufenden Programm verwendet werden kann, muss das aufrufende Programm beim Ausführen der gespeicherten Prozedur das OUTPUT-Schlüsselwort verwenden.

Beispiele:

Das folgende Beispiel zeigt eine gespeicherte Prozedur mit einem Eingabe- und einem Ausgabeparameter. Der erste Parameter in der gespeicherten Prozedur, @SalesPerson, empfängt den Eingabewert, der vom aufrufenden Programm angegeben wird, und der zweite Parameter, @SalesYTD, wird verwendet, um den Wert an das aufrufende Programm zurückzugeben. Die SELECT-Anweisung verwendet den @SalesPerson-Parameter, um den richtigen Wert für SalesYTD zu erhalten, und weist den Wert dem @SalesYTD-Ausgabeparameter zu.

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

Die folgenden Anweisungen führen die gespeicherte Prozedur mit einem Wert für den Eingabeparameter aus und speichert den Ausgabewert der gespeicherten Prozedur lokal für das aufrufende Programm in der @SalesYTD-Variablen.

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

Eingabewerte können auch als Ausgabeparameter angegeben werden, wenn die gespeicherte Prozedur ausgeführt wird. Auf diese Weise kann die gespeicherte Prozedur einen Wert von dem aufrufenden Programm erhalten, diesen Wert ändern oder andere Operationen darauf ausführen und den neuen Wert anschließend an das aufrufende Programm zurückgeben. In dem zuvor aufgeführten Beispiel kann der @SalesYTDBySalesPerson-Variablen vor der Ausführung der gespeicherten Prozedur ein Wert zugewiesen werden. Die @SalesYTD-Variable enthält den Wert des Parameters im Rumpf der gespeicherten Prozedur, und der Wert der @SalesYTD-Variablen wird an das aufrufende Programm zurückgegeben, wenn die gespeicherte Prozedur beendet wird. Dies wird häufig als "Fähigkeit zur Verweisübergabe" bezeichnet.

Wird OUTPUT für einen Parameter angegeben, wenn eine gespeicherte Prozedur ausgeführt wird, und wurde der Parameter in der gespeicherten Prozedur nicht mithilfe von OUTPUT definiert, wird eine Fehlermeldung ausgegeben. Sie können eine gespeicherte Prozedur mit Ausgabeparameter ausführen, ohne OUTPUT beim Ausführen der gespeicherten Prozedur anzugeben. In diesem Fall wird kein Fehler zurückgegeben; der Ausgabewert kann jedoch nicht in dem aufrufenden Programm verwendet werden.