Zurückgeben von Daten von einer gespeicherten ProzedurReturn Data from a Stored Procedure

GILT FÜR: jaSQL Server jaAzure SQL-DatenbankjaAzure SQL Data Warehouse jaParallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

Es gibt drei Methoden, Daten aus einer Prozedur an ein aufrufendes Programm zurückzugeben: Resultsets, Ausgabeparameter und Rückgabecodes.There are three ways of returning data from a procedure to a calling program: result sets, output parameters, and return codes. Dieses Thema enthält Informationen zu diesen drei Ansätzen.This topic provides information on the three approaches.

Zurückgeben von Daten mithilfe von ResultsetsReturning Data Using Result Sets

Wenn Sie eine SELECT-Anweisung im Textkörper einer gespeicherten Prozedur (jedoch nicht die Anweisungen SELECT... INTO oder INSERT... SELECT) einfügen, werden die Zeilen, die durch die SELECT-Anweisung angegeben werden, direkt an den Client gesendet.If you include a SELECT statement in the body of a stored procedure (but not a SELECT ... INTO or INSERT ... SELECT), the rows specified by the SELECT statement will be sent directly to the client. Bei großen Resultsets wird die Ausführung der gespeicherten Prozedur nicht mit der nächsten Anweisung fortgesetzt, bis das Resultset vollständig an den Client gesendet wurde.For large result sets the stored procedure execution will not continue to the next statement until the result set has been completely sent to the client. Bei kleinen Resultsets werden die Ergebnisse für die Rückgabe an den Client gespoolt und die Ausführung wird fortgesetzt.For small result sets the results will be spooled for return to the client and execution will continue. Wenn mehrere dieser SELECT-Anweisungen während der Ausführung der gespeicherten Prozedur ausgeführt werden, werden mehrere Resultsets an den Client gesendet.If multiple such SELECT statements are run during the exeuction of the stored proceudre, multiple result sets will be sent to the client. Dieses Verhalten gilt auch für geschachtelte TSQL-Batches, geschachtelte gespeicherte Prozeduren und allgemeine TSQL-Batches.This behavior also applies to nested TSQL batches, nested stored procedures and top-level TSQL batches.

Beispiele für das Zurückgeben von Daten mithilfe eines ResultsetsExamples of Returning Data Using a Result Set

Das folgende Beispiel zeigt eine gespeicherte Prozedur, die die Werte „LastName“ und „SalesYTD“ für alle SalesPerson-Zeilen zurückgibt, die auch in der Ansicht „vEmployee“ angezeigt werden.The following example shows a stored procedure that returns the LastName and SalesYTD values for all SalesPerson rows that also appear in the vEmployee view.

USE AdventureWorks2012;  
GO  
IF OBJECT_ID('Sales.uspGetEmployeeSalesYTD', 'P') IS NOT NULL  
   DROP PROCEDURE Sales.uspGetEmployeeSalesYTD;  
GO  
CREATE PROCEDURE Sales.uspGetEmployeeSalesYTD  
AS    
 
   SET NOCOUNT ON;  
   SELECT LastName, SalesYTD  
   FROM Sales.SalesPerson AS sp  
   JOIN HumanResources.vEmployee AS e ON e.BusinessEntityID = sp.BusinessEntityID  
   
RETURN  
GO  
 

Zurückgeben von Daten mithilfe eines OUTPUT-ParametersReturning Data Using an Output Parameter

Wenn Sie in der Prozedurdefinition für einen Parameter das Schlüsselwort OUTPUT angeben, kann die Prozedur den aktuellen Wert des Parameters an das aufrufende Programm zurückgeben, wenn die Prozedur beendet wird.If you specify the OUTPUT keyword for a parameter in the procedure definition, the procedure can return the current value of the parameter to the calling program when the procedure exits. 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 Prozedur das Schlüsselwort OUTPUT verwenden.To save the value of the parameter in a variable that can be used in the calling program, the calling program must use the OUTPUT keyword when executing the procedure. Weitere Informationen dazu, welche Datentypen als Ausgabeparameter verwendet werden können, finden Sie unter CREATE PROCEDURE (Transact-SQL).For more information about what data types can be used as output parameters, see CREATE PROCEDURE (Transact-SQL).

Beispiele für AusgabeparameterExamples of Output Parameter

Das folgende Beispiel zeigt eine Prozedur mit einem Eingabe- und einem Ausgabeparameter.The following example shows a procedure with an input and an output parameter. Der @SalesPerson -Parameter würde einen vom aufrufenden Programm angegebenen Eingabewert empfangen.The @SalesPerson parameter would receive an input value specified by the calling program. Die SELECT-Anweisung verwendet den im Eingabeparameter übergebenen Wert, um den richtigen SalesYTD -Wert abzurufen.The SELECT statement uses the value passed into the input parameter to obtain the correct SalesYTD value. Die SELECT-Anweisung weist den Wert auch dem @SalesYTD -Ausgabeparameter zu, der den Wert an das aufrufende Programm zurückgibt, wenn die Prozedur beendet wird.The SELECT statement also assigns the value to the @SalesYTD output parameter, which returns the value to the calling program when the procedure exits.

USE AdventureWorks2012;  
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.BusinessEntityID = sp.BusinessEntityID  
    WHERE LastName = @SalesPerson;  
RETURN  
GO  
  

Im folgenden Beispiel wird die im ersten Beispiel erstellte Prozedur aufgerufen und der Ausgabewert gespeichert, der von der aufgerufenen Prozedur in der @SalesYTD -Variablen, die eine lokale Variable des aufrufenden Programm ist, zurückgegeben wurde.The following example calls the procedure created in the first example and saves the output value returned from the called procedure in the @SalesYTD variable, which is local to the calling program.

-- 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 Prozedur ausgeführt wird.Input values can also be specified for OUTPUT parameters when the procedure is executed. Auf diese Weise kann die Prozedur einen Wert von dem aufrufenden Programm erhalten, diesen Wert ändern oder andere Operationen mit dem Wert ausführen und den neuen Wert anschließend an das aufrufende Programm zurückgeben.This allows the procedure to receive a value from the calling program, change or perform operations with the value, and then return the new value to the calling program. In dem zuvor aufgeführten Beispiel kann der @SalesYTDBySalesPerson -Variablen ein Wert zugewiesen werden, bevor das Programm die Sales.uspGetEmployeeSalesYTD -Prozedur aufruft.In the previous example, the @SalesYTDBySalesPerson variable can be assigned a value before the program calls the Sales.uspGetEmployeeSalesYTD procedure. Das EXECUTE-Anweisung übergibt in diesem Fall den @SalesYTDBySalesPerson -Variablenwert an den OUTPUT-Parameter @SalesYTD .The execute statement would pass the @SalesYTDBySalesPerson variable value into the @SalesYTD OUTPUT parameter. Im Prozedurtext kann der Wert zu Berechnungen verwendet werden, die einen neuen Wert generieren.Then in the procedure body, the value could be used for calculations that generate a new value. Der neue Wert wird über den OUTPUT-Parameter aus der Prozedur heraus weitergereicht, wobei der Wert in der @SalesYTDBySalesPerson -Variablen aktualisiert wird, wenn die Prozedur beendet wird.The new value would be passed back out of the procedure through the OUTPUT parameter, updating the value in the @SalesYTDBySalesPerson variable when the procedure exits. Dies wird häufig als "Fähigkeit zur Verweisübergabe" bezeichnet.This is often referred to as "pass-by-reference capability."

Wenn beim Aufruf einer Prozedur OUTPUT für einen Parameter angegeben wird und dieser Parameter in der Prozedurdefinition nicht mithilfe von OUTPUT definiert worden ist, dann wird eine Fehlermeldung ausgegeben.If you specify OUTPUT for a parameter when you call a procedure and that parameter is not defined by using OUTPUT in the procedure definition, you get an error message. Sie können eine Prozedur mit Ausgabeparameter ausführen, ohne OUTPUT beim Ausführen der Prozedur anzugeben.However, you can execute a procedure with output parameters and not specify OUTPUT when executing the procedure. In diesem Fall wird kein Fehler zurückgegeben; der Ausgabewert kann jedoch nicht in dem aufrufenden Programm verwendet werden.No error is returned, but you cannot use the output value in the calling program.

Verwenden des Cursor-Datentyps in OUTPUT-ParameternUsing the Cursor Data Type in OUTPUT Parameters

Transact-SQLTransact-SQL Prozeduren können den Datentyp cursor nur für OUTPUT-Parameter verwenden.procedures can use the cursor data type only for OUTPUT parameters. Wenn der cursor -Datentyp für einen Parameter angegeben wird, müssen in der Prozedurdefinition sowohl das Schlüsselwort VARYING als auch das Schlüsselwort OUTPUT für diesen Parameter angegeben werden.If the cursor data type is specified for a parameter, both the VARYING and OUTPUT keywords must be specified for that parameter in the procedure definition. Für einen Parameter kann nur das Schlüsselwort OUTPUT angegeben werden. Wenn allerdings das Schlüsselwort VARYING in der Parameterdeklaration angegeben worden ist, müssen der Datentyp cursor verwendet und zudem das Schlüsselwort OUTPUT angegeben werden.A parameter can be specified as only OUTPUT but if the VARYING keyword is specified in the parameter declaration, the data type must be cursor and the OUTPUT keyword must also be specified.

Hinweis

Der Datentyp cursor kann nicht durch Datenbank-APIs, wie z. B. OLE DB, ODBC, ADO und DB-Library, an Anwendungsvariablen gebunden werden.The cursor data type cannot be bound to application variables through the database APIs such as OLE DB, ODBC, ADO, and DB-Library. Da OUTPUT-Parameter gebunden werden müssen, bevor eine Anwendung eine Prozedur ausführen kann, können Prozeduren mit cursor -OUTPUT-Parametern nicht aus den Datenbank-APIs heraus aufgerufen werden.Because OUTPUT parameters must be bound before an application can execute a procedure, procedures with cursor OUTPUT parameters cannot be called from the database APIs. Diese Prozeduren können von Transact-SQLTransact-SQL -Batches, Prozeduren oder Triggern heraus aufgerufen werden, wenn die cursor -OUTPUT-Variable einer lokalen Transact-SQLTransact-SQL - cursor -Variablen zugewiesen wird.These procedures can be called from Transact-SQLTransact-SQL batches, procedures, or triggers only when the cursor OUTPUT variable is assigned to a Transact-SQLTransact-SQL local cursor variable.

Regeln für CursorausgabeparameterRules for Cursor Output Parameters

Folgende Regeln gelten für Ausgabeparameter vom cursor -Datentyp, wenn die Prozedur ausgeführt wird:The following rules pertain to cursor output parameters when the procedure is executed:

  • Bei einem Vorwärtscursor werden im Resultset des Cursors nur die Zeilen zurückgegeben, die sich am Ende der Ausführung der Prozedur an und hinter der Cursorposition befinden. Beispiel:For a forward-only cursor, the rows returned in the cursor's result set are only those rows at and beyond the position of the cursor at the conclusion of the procedure execution, for example:

    • Ein nicht bildlauffähiger Cursor wird in einer Prozedur für ein Resultset namens RS geöffnet, das 100 Zeilen umfasst.A nonscrollable cursor is opened in a procedure on a result set named RS of 100 rows.

    • Die Prozedur ruft die ersten 5 Zeilen des Resultsets RS ab.The procedure fetches the first 5 rows of result set RS.

    • Die Prozedur gibt das Resultset an den Aufrufer zurück.The procedure returns to its caller.

    • Das Resultset RS, das an den Aufrufer zurückgegeben wird, besteht aus den Zeilen 6 bis 100 von RS, und der Cursor im Aufrufer wird vor der ersten Zeile von RS positioniert.The result set RS returned to the caller consists of rows from 6 through 100 of RS, and the cursor in the caller is positioned before the first row of RS.

  • Wenn ein Vorwärtscursor beim Beenden der Prozedur vor der ersten Zeile positioniert ist, wird das gesamte Resultset an den aufrufenden Batch, die aufrufende Prozedur oder den aufrufenden Trigger zurückgegeben.For a forward-only cursor, if the cursor is positioned before the first row when the procedure exits, the entire result set is returned to the calling batch, procedure, or trigger. Nach der Rückgabe wird der Cursor vor der ersten Zeile positioniert.When returned, the cursor position is set before the first row.

  • Wenn ein Vorwärtscursor beim Beenden der Prozedur hinter dem Ende der letzten Zeile positioniert ist, wird ein leeres Resultset an den aufrufenden Batch, die aufrufende Prozedur oder den aufrufenden Trigger zurückgegeben.For a forward-only cursor, if the cursor is positioned beyond the end of the last row when the procedure exits, an empty result set is returned to the calling batch, procedure, or trigger.

    Hinweis

    Ein leeres Resultset ist nicht das Gleiche wie ein NULL-Wert.An empty result set is not the same as a null value.

  • Bei einem bildlauffähigen Cursor werden beim Beenden der Prozedur alle Zeilen im Resultset an den aufrufenden Batch, die aufrufende gespeicherte Prozedur oder den aufrufenden Trigger zurückgegeben.For a scrollable cursor, all the rows in the result set are returned to the calling batch, procedure, or trigger when the procedure exits. Nach der Rückgabe behält der Cursor die Position des letzten in der Prozedur ausgeführten Abrufs bei.When returned, the cursor position is left at the position of the last fetch executed in the procedure.

  • Bei allen Cursortypen wird ein NULL-Wert an den aufrufenden Batch, die aufrufende Prozedur oder den aufrufenden Trigger zurückgegeben, wenn der Cursor geschlossen ist.For any type of cursor, if the cursor is closed, then a null value is passed back to the calling batch, procedure, or trigger. Dies ist auch dann der Fall, wenn ein Cursor einem Parameter zugewiesen ist, dieser Cursor jedoch nie geöffnet wird.This will also be the case if a cursor is assigned to a parameter, but that cursor is never opened.

    Hinweis

    Der geschlossene Status ist nur zum Zeitpunkt der Rückgabe relevant.The closed state matters only at return time. Beispielsweise ist es zulässig, einen Cursor während eines Teils der Prozedur zu schließen, ihn zu einem späteren Zeitpunkt in der Prozedur wieder zu öffnen und das Resultset dieses Cursors an den aufrufenden Batch, die aufrufende Prozedur oder den aufrufenden Trigger zurückzugeben.For example, it is valid to close a cursor part of the way through the procedure, to open it again later in the procedure, and return that cursor's result set to the calling batch, procedure, or trigger.

Beispiele für CursorausgabeparameterExamples of Cursor Output Parameters

Im folgenden Beispiel wird eine gespeicherte Prozedur mit einem Ausgabeparameter @currency_cursor vom Datentyp cursor erstellt.In the following example, a procedure is created that specified an output parameter, @currency_cursor using the cursor data type. Die Prozedur wird anschließend in einem Batch aufgerufen.The procedure is then called in a batch.

Zuerst wird die Prozedur erstellt, die einen Cursor für die Currency-Tabelle deklariert und dann öffnet.First, create the procedure that declares and then opens a cursor on the Currency table.

USE AdventureWorks2012;  
GO  
IF OBJECT_ID ( 'dbo.uspCurrencyCursor', 'P' ) IS NOT NULL  
    DROP PROCEDURE dbo.uspCurrencyCursor;  
GO  
CREATE PROCEDURE dbo.uspCurrencyCursor   
    @CurrencyCursor CURSOR VARYING OUTPUT  
AS  
    SET NOCOUNT ON;  
    SET @CurrencyCursor = CURSOR  
    FORWARD_ONLY STATIC FOR  
      SELECT CurrencyCode, Name  
      FROM Sales.Currency;  
    OPEN @CurrencyCursor;  
GO  
  

Als Nächstes wird ein Batch ausgeführt, der eine lokale Cursorvariable deklariert, die Prozedur ausführt, um der lokalen Variablen den Cursor zuzuweisen, und dann die Zeilen aus dem Cursor abruft.Next, execute a batch that declares a local cursor variable, executes the procedure to assign the cursor to the local variable, and then fetches the rows from the cursor.

USE AdventureWorks2012;  
GO  
DECLARE @MyCursor CURSOR;  
EXEC dbo.uspCurrencyCursor @CurrencyCursor = @MyCursor OUTPUT;  
WHILE (@@FETCH_STATUS = 0)  
BEGIN;  
     FETCH NEXT FROM @MyCursor;  
END;  
CLOSE @MyCursor;  
DEALLOCATE @MyCursor;  
GO  
  

Zurückgeben von Daten mithilfe eines RückgabecodesReturning Data Using a Return Code

Eine Prozedur kann einen ganzzahligen Wert zurückgeben, der als Rückgabecode bezeichnet wird, um den Ausführungsstatus einer Prozedur anzuzeigen.A procedure can return an integer value called a return code to indicate the execution status of a procedure. Sie geben den Rückgabecode für eine Prozedur mithilfe der RETURN-Anweisung an.You specify the return code for a procedure using the RETURN statement. Wie schon die OUTPUT-Parameter müssen Sie auch den Rückgabecode in einer Variablen speichern, wenn die Prozedur ausgeführt wird, damit der Wert des Rückgabecodes in dem aufrufenden Programm verwendet werden kann.As with OUTPUT parameters, you must save the return code in a variable when the procedure is executed in order to use the return code value in the calling program. So wird z. B. in den folgenden Codezeilen die Zuweisungsvariable @result vom Datentyp int verwendet, um den Rückgabecode der Prozedur my_proczu speichern:For example, the assignment variable @result of data type int is used to store the return code from the procedure my_proc, such as:

DECLARE @result int;  
EXECUTE @result = my_proc;  

Rückgabecodes werden häufig in Blöcken zur Ablaufsteuerung innerhalb von Prozeduren verwendet, um den Wert des Rückgabecodes für sämtliche Fehler festzulegen.Return codes are commonly used in control-of-flow blocks within procedures to set the return code value for each possible error situation. Sie können die @@ERROR-Funktion nach einer Transact-SQLTransact-SQL -Anweisung verwenden, um festzustellen, ob während der Ausführung der Anweisung ein Fehler aufgetreten ist.You can use the @@ERROR function after a Transact-SQLTransact-SQL statement to detect whether an error occurred during the execution of the statement. Vor der Einführung der TRY/CATCH/THROW-Fehlerbehandlung in TSQL waren Rückgabecodes manchmal erforderlich, um den Erfolg oder Misserfolg von gespeicherten Prozeduren festzustellen.Before the introduction of TRY/CATCH/THROW error handling in TSQL return codes were sometimes required to determine the success or failure of stored procedures. Gespeicherte Prozeduren sollten Misserfolge immer mit einem Fehler (der bei Bedarf durch THROW/RAISERROR generiert wird) anzeigen, und keinen Rückgabecode benötigen, um auf den Fehler hinzuweisen.Stored Procedures should always indicate failure with an error (generated with THROW/RAISERROR if necessary), and not rely on a return code to indicate the failure. Ebenfalls sollten Sie vermeiden, den Rückgabecode für das Zurückgeben von Anwendungsdaten zu verwenden.Also you should avoid using the return code to return application data.

Beispiele für RückgabecodesExamples of Return Codes

Das folgende Beispiel zeigt die usp_GetSalesYTD -Prozedur mit Fehlerbehandlung, in der für verschiedene Fehler spezielle Rückgabecodewerte festgelegt sind.The following example shows the usp_GetSalesYTD procedure with error handling that sets special return code values for various errors. In der Tabelle werden die ganzzahligen Werte aufgeführt, die die Prozedur den einzelnen möglichen Fehlern zuweist, sowie die Bedeutung der einzelnen Werte.The following table shows the integer value that is assigned by the procedure to each possible error, and the corresponding meaning for each value.

RückgabecodewertReturn code value BedeutungMeaning
00 Erfolgreiche AusführungSuccessful execution.
11 Der erforderliche Parameterwert ist nicht angegeben.Required parameter value is not specified.
22 Der angegebene Parameterwert ist ungültig.Specified parameter value is not valid.
33 Beim Abrufen der Vertriebswerte ist ein Fehler aufgetreten.Error has occurred getting sales value.
44 Für diesen Vertriebsmitarbeiter wurde ein Vertriebswert von NULL gefunden.NULL sales value found for the salesperson.
USE AdventureWorks2012;  
GO  
IF OBJECT_ID('Sales.usp_GetSalesYTD', 'P') IS NOT NULL  
    DROP PROCEDURE Sales.usp_GetSalesYTD;  
GO  
CREATE PROCEDURE Sales.usp_GetSalesYTD  
@SalesPerson nvarchar(50) = NULL,  -- NULL default value  
@SalesYTD money = NULL OUTPUT  
AS    
  
-- Validate the @SalesPerson parameter.  
IF @SalesPerson IS NULL  
   BEGIN  
       PRINT 'ERROR: You must specify a last name for the sales person.'  
       RETURN(1)  
   END  
ELSE  
   BEGIN  
   -- Make sure the value is valid.  
   IF (SELECT COUNT(*) FROM HumanResources.vEmployee  
          WHERE LastName = @SalesPerson) = 0  
      RETURN(2)  
   END  
-- Get the sales for the specified name and   
-- assign it to the output parameter.  
SELECT @SalesYTD = SalesYTD   
FROM Sales.SalesPerson AS sp  
JOIN HumanResources.vEmployee AS e ON e.BusinessEntityID = sp.BusinessEntityID  
WHERE LastName = @SalesPerson;  
-- Check for SQL Server errors.  
IF @@ERROR <> 0   
   BEGIN  
      RETURN(3)  
   END  
ELSE  
   BEGIN  
   -- Check to see if the ytd_sales value is NULL.  
     IF @SalesYTD IS NULL  
       RETURN(4)   
     ELSE  
      -- SUCCESS!!  
        RETURN(0)  
   END  
-- Run the stored procedure without specifying an input value.  
EXEC Sales.usp_GetSalesYTD;  
GO  
-- Run the stored procedure with an input value.  
DECLARE @SalesYTDForSalesPerson money, @ret_code int;  
-- Execute the procedure specifying a last name for the input parameter  
-- and saving the output value in the variable @SalesYTD  
EXECUTE Sales.usp_GetSalesYTD  
    N'Blythe', @SalesYTD = @SalesYTDForSalesPerson OUTPUT;  
PRINT N'Year-to-date sales for this employee is ' +  
    CONVERT(varchar(10), @SalesYTDForSalesPerson);  
  

Im folgenden Beispiel wird ein Programm erstellt, das die von der usp_GetSalesYTD -Prozedur zurückgegebenen Rückgabecodes verarbeitet.The following example creates a program to handle the return codes that are returned from the usp_GetSalesYTD procedure.

-- Declare the variables to receive the output value and return code   
-- of the procedure.  
DECLARE @SalesYTDForSalesPerson money, @ret_code int;  
  
-- Execute the procedure with a title_id value  
-- and save the output value and return code in variables.  
EXECUTE @ret_code = Sales.usp_GetSalesYTD  
    N'Blythe', @SalesYTD = @SalesYTDForSalesPerson OUTPUT;  
--  Check the return codes.  
IF @ret_code = 0  
BEGIN  
   PRINT 'Procedure executed successfully'  
   -- Display the value returned by the procedure.  
   PRINT 'Year-to-date sales for this employee is ' + CONVERT(varchar(10),@SalesYTDForSalesPerson)  
END  
ELSE IF @ret_code = 1  
   PRINT 'ERROR: You must specify a last name for the sales person.'  
ELSE IF @ret_code = 2   
   PRINT 'ERROR: You must enter a valid last name for the sales person.'  
ELSE IF @ret_code = 3  
   PRINT 'ERROR: An error occurred getting sales value.'  
ELSE IF @ret_code = 4  
   PRINT 'ERROR: No sales recorded for this employee.'     
GO  
  

Weitere InformationenSee Also

DEKLARIEREN SIE @local_variable (Transact-SQL) DECLARE @local_variable (Transact-SQL)
PRINT (Transact-SQL) PRINT (Transact-SQL)
SET @local_variable (Transact-SQL) SET @local_variable (Transact-SQL)
Cursor Cursors
RETURN (Transact-SQL) RETURN (Transact-SQL)
@@ERROR (Transact-SQL)@@ERROR (Transact-SQL)