ERROR_PROCEDURE (Transact-SQL)

Retorna o nome do procedimento armazenado ou gatilho no qual ocorreu um erro que fez o bloco CATCH de uma construção TRY…CATCH ser executado.

Ícone de vínculo de tópicoConvenções de sintaxe Transact-SQL

Sintaxe

ERROR_PROCEDURE ( )

Tipos de retorno

nvarchar(126)

Valor de retorno

Quando chamado em um bloco CATCH, retorna o nome do procedimento armazenado no qual o erro ocorreu.

Retorna NULL se o erro não ocorreu dentro de um procedimento armazenado ou gatilho.

Retorna NULL se for chamado fora do escopo de um bloco CATCH.

Comentários

ERROR_PROCEDURE pode ser chamado em qualquer lugar dentro do escopo de um bloco CATCH.

ERROR_PROCEDURE retorna o nome do procedimento armazenado ou gatilho no qual o erro ocorreu, independentemente do número de vezes que ele é chamado ou se é chamado dentro do escopo do bloco CATCH. É diferente de funções como @@ERROR, que retornam apenas o número de erro na instrução imediatamente posterior àquela que causou o erro, ou na primeira instrução do bloco CATCH.

Em blocos CATCH aninhados, ERROR_PROCEDURE retorna o nome do procedimento armazenado ou gatilho específico do escopo do bloco CATCH no qual é referenciado. Por exemplo, o bloco CATCH de uma construção TRY…CATCH pode ter uma construção TRY…CATCH aninhada. Dentro do bloco CATCH aninhado, ERROR_PROCEDURE retorna o nome do procedimento armazenado ou gatilho no qual ocorreu o erro que invocou o bloco CATCH aninhado. Se ERROR_PROCEDURE for executado no bloco CATCH externo, ele retornará o nome do procedimento armazenado ou gatilho no qual ocorreu o erro que invocou aquele bloco CATCH.

Exemplos

A. Usando ERROR_PROCEDURE em um bloco CATCH

O exemplo de código a seguir mostra um procedimento armazenado que gera um erro de divisão por zero. ERROR_PROCEDURE retorna o nome do procedimento armazenado no qual o erro ocorreu.

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. Usando ERROR_PROCEDURE em um bloco CATCH com outras ferramentas de tratamento de erros

O exemplo de código a seguir mostra um procedimento armazenado que gera um erro de divisão por zero. Junto com o nome do procedimento armazenado no qual o erro ocorreu, são retornadas as informações relacionadas ao erro.

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