Compartilhar via


ERROR_PROCEDURE (Transact-SQL)

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do AzureAzure Synapse AnalyticsPDW (Analytics Platform System)Ponto de extremidade de análise do SQLWarehouse no Microsoft Fabric

Essa função retorna o nome do procedimento armazenado ou gatilho em que ocorre um erro, se esse erro causou a CATCH execução do bloco de um TRY...CATCH constructo.

  • O SQL Server 2017 (14.x) e versões posteriores retornam schema_name.stored_procedure_name
  • Retorno do SQL Server 2016 (13.x) e do Banco de Dados SQL do Azure stored_procedure_name

Convenções de sintaxe de Transact-SQL

Sintaxe

ERROR_PROCEDURE ( )

Tipos de retorno

nvarchar(128)

Valor de retorno

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

ERROR_PROCEDURE retornará NULL se o erro não ocorreu em um procedimento armazenado ou gatilho.

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

Comentários

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

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. Esse resultado contrasta com uma função como @@ERROR, que retorna apenas um número de erro na instrução imediatamente após a que causa um erro.

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

a. Usar 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. Usar 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)