Share via


Usar RETURN

La instrucción RETURN termina incondicionalmente una consulta, procedimiento almacenado o lote. Ninguna de las instrucciones de un procedimiento almacenado o lote que siga a la instrucción RETURN se ejecutará.

Cuando se usa en un procedimiento almacenado, la instrucción RETURN puede especificar un valor entero para devolver a la aplicación, lote o procedimiento que realiza la llamada. Si no se especifica ningún valor en la instrucción RETURN, un procedimiento almacenado devuelve el valor 0.

La mayor parte de los procedimientos almacenados siguen la convención de usar el código de retorno para indicar si el procedimiento almacenado se ha ejecutado correctamente o no. Los procedimientos almacenados devuelven el valor 0 cuando no se encontraron errores. Cualquier valor distinto de cero indica que se produjo un error. Por ejemplo:

USE AdventureWorks;
GO
-- Create a procedure that takes one input parameter
-- and returns one output parameter and a return code.
CREATE PROCEDURE SampleProcedure @EmployeeIDParm INT,
    @MaxTotal INT OUTPUT
AS
-- Declare and initialize a variable to hold @@ERROR.
DECLARE @ErrorSave int;
SET @ErrorSave = 0;
-- Do a SELECT using the input parameter.
SELECT c.FirstName, c.LastName, e.Title
FROM HumanResources.Employee AS e
JOIN Person.Contact AS c ON e.ContactID = c.ContactID
WHERE EmployeeID = @EmployeeIDParm;
-- Save any nonzero @@ERROR value.
IF (@@ERROR <> 0)
    SET @ErrorSave = @@ERROR;
-- Set a value in the output parameter.
SELECT @MaxTotal = MAX(TotalDue)
FROM Sales.SalesOrderHeader;
IF (@@ERROR <> 0)
    SET @ErrorSave = @@ERROR;
-- Returns 0 if neither SELECT statement had
-- an error, otherwise returns the last error.
RETURN @ErrorSave;
GO

Un lote o procedimiento almacenado de Transact-SQL que ejecuta un procedimiento almacenado puede recuperar el código de retorno en una variable de tipo entero:

DECLARE @ReturnStatus int;
DECLARE @MaxTotalVariable int;
DECLARE @MaxTotal int;
EXECUTE @ReturnStatus = SampleProcedure @EmployeeIDParm = 65 ,@MaxTotal = @MaxTotalVariable OUTPUT;
PRINT ' ';
PRINT 'Return code = ' + CAST(@ReturnStatus AS CHAR(10));
PRINT 'Maximum Order Total = ' + CAST(@MaxTotalVariable AS CHAR(15));
GO

Las aplicaciones que llaman a un procedimiento almacenado pueden enlazar una variable de tipo entero al marcador de parámetro correspondiente al código de retorno.