Compartilhar via


ERROR_PROCEDURE (Transact-SQL)

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure Azure Synapse Analytics PDW (Analytics Platform System) Ponto de extremidade de análise do SQL Warehouse no Microsoft Fabric

Esta função retorna o nome do procedimento armazenado ou gatilho no qual ocorreu um erro, caso esse erro tenha causado a execução do bloco CATCH de um constructo TRY...CATCH.

  • O SQL Server 2017 até a versão atual retorna schema_name.stored_procedure_name
  • O SQL Server 2016 retorna stored_procedure_name

Convenções de sintaxe de Transact-SQL

Sintaxe

ERROR_PROCEDURE ( )  

Tipos de retorno

nvarchar(128)

Valor retornado

Quando chamado em um bloco CATCH, ERROR_PROCEDURE retorna o nome do procedimento armazenado ou gatilho no qual o erro se originou.

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

ERROR_PROCEDURE retorna NULL quando chamado fora do escopo de um bloco CATCH.

Comentários

ERROR_PROCEDURE dá suporte a chamadas em qualquer lugar dentro do escopo de um bloco CATCH.

ERROR_PROCEDURE retorna o nome do procedimento armazenado ou gatilho em que ocorre um erro, independentemente de quantas vezes ele é executado ou do local em que ele é executado dentro do escopo do bloco CATCH. É diferente de uma função como @@ERROR, que retorna apenas um número de erro na instrução imediatamente após àquela que causa um erro.

Exemplos: Azure Synapse Analytics e PDW (Analytics Platform System)

a. Usando ERROR_PROCEDURE em um bloco CATCH

Este exemplo mostra um procedimento armazenado que gera um erro de divisão por zero. ERROR_PROCEDURE retorna o nome do procedimento armazenado no qual ocorreu o erro.

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

Veja a seguir o conjunto de resultados.

-----------

(0 row(s) affected)

ErrorProcedure
--------------------
usp_ExampleProc

(1 row(s) affected)

B. Usando ERROR_PROCEDURE em um bloco CATCH com outras ferramentas de tratamento de erros

Este exemplo mostra um procedimento armazenado que gera um erro de divisão por zero. Junto com o nome do procedimento armazenado em que ocorreu o erro, o procedimento armazenado retorna informações sobre o erro.

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

Veja a seguir o conjunto de resultados.

-----------

(0 row(s) affected)

ErrorNumber ErrorSeverity ErrorState  ErrorProcedure   ErrorMessage                       ErrorLine
----------- ------------- ----------- ---------------- ---------------------------------- -----------
8134        16            1           usp_ExampleProc  Divide by zero error encountered.  6

(1 row(s) affected)

Confira também

sys.messages (Transact-SQL)
TRY...CATCH (Transact-SQL)
ERROR_LINE (Transact-SQL)
ERROR_MESSAGE (Transact-SQL)
ERROR_NUMBER (Transact-SQL)
ERROR_SEVERITY (Transact-SQL)
ERROR_STATE (Transact-SQL)
RAISERROR (Transact-SQL)
@@ERROR (Transact-SQL)