ERROR_PROCEDURE (Transact-SQL)

Devuelve el nombre del procedimiento almacenado o del desencadenador en el que se ha producido un error que ha causado la ejecución de un bloque CATCH de una construcción TRY…CATCH.

Icono de vínculo a temasConvenciones de sintaxis de Transact-SQL

Sintaxis

ERROR_PROCEDURE ( )

Tipos de valor devueltos

nvarchar(126)

Valor devuelto

Cuando se llama en un bloque CATCH, devuelve el nombre del procedimiento almacenado en el que se ha producido el error.

Devuelve NULL si el error no se ha producido en un procedimiento almacenado o un desencadenador.

Devuelve NULL si se llama fuera del ámbito de un bloque CATCH.

Notas

ERROR_PROCEDURE se puede llamar en cualquier lugar dentro del ámbito de un bloque CATCH.

ERROR_PROCEDURE devuelve el nombre del procedimiento almacenado o desencadenador en el que se ha producido el error, independientemente del número de veces que se llame o del lugar desde el que se haga dentro del ámbito del bloque CATCH. Esto contrasta con las funciones, como @@ERROR, que devuelven el número de error en la instrucción inmediatamente posterior a la que ha causado el error o en la primera instrucción del bloque CATCH.

En los bloques CATCH anidados, ERROR_PROCEDURE devuelve el nombre del procedimiento almacenado o el desencadenador específico del ámbito del bloque CATCH en el que se hace referencia a él. Por ejemplo, el bloque CATCH de una construcción TRY…CATCH podría tener una TRY…CATCH anidada. En el bloque CATCH anidado, ERROR_PROCEDURE devuelve el nombre del procedimiento almacenado o el desencadenador en el que se ha producido el error y que ha llamado al bloque CATCH anidado. Si ERROR_PROCEDURE se ejecuta en el bloque CATCH externo, devuelve el nombre del procedimiento almacenado o el desencadenador en el que se ha producido el error y que ha llamado al bloque CATCH.

Ejemplos

A. Utilizar ERROR_PROCEDURE en un bloque CATCH

En el siguiente ejemplo de código se muestra un procedimiento almacenado que genera un error de división por cero. ERROR_PROCEDURE devuelve el nombre del procedimiento almacenado en el que se produce el error.

USE AdventureWorks;
GO

-- Verify that the stored procedure does not already exist.
IF OBJECT_ID ( 'usp_ExampleProc', 'P' ) IS NOT NULL 
    DROP PROCEDURE usp_ExampleProc;
GO

-- Create a stored procedure that 
-- generates a divide-by-zero error.
CREATE PROCEDURE usp_ExampleProc
AS
    SELECT 1/0;
GO

BEGIN TRY
    -- Execute the stored procedure inside the TRY block.
    EXECUTE usp_ExampleProc;
END TRY
BEGIN CATCH
    SELECT ERROR_PROCEDURE() AS ErrorProcedure;
END CATCH;
GO

B. Utilizar ERROR_PROCEDURE en un bloque CATCH con otras herramientas de control de errores

En el siguiente ejemplo de código se muestra un procedimiento almacenado que genera un error de división por cero. Junto al nombre del procedimiento almacenado en el que se ha producido el error, se devuelve información relacionada con dicho error.

USE AdventureWorks;
GO

-- Verify that the stored procedure does not already exist.
IF OBJECT_ID ( 'usp_ExampleProc', 'P' ) IS NOT NULL 
    DROP PROCEDURE usp_ExampleProc;
GO

-- Create a stored procedure that 
-- generates a divide-by-zero error.
CREATE PROCEDURE usp_ExampleProc
AS
    SELECT 1/0;
GO

BEGIN TRY
    -- Execute the stored procedure inside the TRY block.
    EXECUTE usp_ExampleProc;
END TRY
BEGIN CATCH
    SELECT 
        ERROR_NUMBER() AS ErrorNumber,
        ERROR_SEVERITY() AS ErrorSeverity,
        ERROR_STATE() AS ErrorState,
        ERROR_PROCEDURE() AS ErrorProcedure,
        ERROR_MESSAGE() AS ErrorMessage,
        ERROR_LINE() AS ErrorLine;
        END CATCH;
GO