Condividi tramite


ERROR_PROCEDURE (Transact-SQL)

Si applica a:SQL ServerDatabase SQL di AzureIstanza gestita di SQL di AzureAzure Synapse AnalyticsPiattaforma di strumenti analitici (PDW)Endpoint di analisi SQL in Microsoft FabricWarehouse in Microsoft Fabric

Questa funzione restituisce il nome della stored procedure o del trigger in cui si verifica un errore, se l'errore ha causato l'esecuzione CATCH del blocco di un TRY...CATCH costrutto.

  • SQL Server 2017 (14.x) e versioni successive restituiscono schema_name.stored_procedure_name
  • SQL Server 2016 (13.x) e database SQL di Azure restituiscono stored_procedure_name

Convenzioni relative alla sintassi Transact-SQL

Sintassi

ERROR_PROCEDURE ( )

Tipi restituiti

Nvarchar(128)

Valore restituito

Quando viene chiamato in un CATCH blocco, ERROR_PROCEDURE restituisce il nome della stored procedure o del trigger in cui ha avuto origine l'errore.

ERROR_PROCEDURE restituisce NULL se l'errore non si è verificato all'interno di una stored procedure o di un trigger.

ERROR_PROCEDURE restituisce NULL quando viene chiamato all'esterno dell'ambito di un CATCH blocco.

Osservazioni:

ERROR_PROCEDURE supporta le chiamate ovunque all'interno dell'ambito di un CATCH blocco.

ERROR_PROCEDURE restituisce il nome della stored procedure o del trigger in cui si verifica un errore, indipendentemente dal numero di esecuzioni o dalla posizione in cui viene eseguita nell'ambito del blocco CATCH. Questo risultato è in contrasto con una funzione come @@ERROR, che restituisce solo un numero di errore nell'istruzione immediatamente successiva a quella che causa un errore.

Esempi: Azure Synapse Analytics e Piattaforma di strumenti analitici (PDW)

R. Usare ERROR_PROCEDURE in un blocco CATCH

In questo esempio viene illustrata una stored procedure che genera un errore di divisione per zero. ERROR_PROCEDURE restituisce il nome della stored procedure in cui si è verificato l'errore.

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

Il set di risultati è il seguente.

-----------

(0 row(s) affected)

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

(1 row(s) affected)

B. Usare ERROR_PROCEDURE in un blocco CATCH con altri strumenti di gestione degli errori

In questo esempio viene illustrata una stored procedure che genera un errore di divisione per zero. Insieme al nome della stored procedure in cui si è verificato l'errore, la stored restituisce informazioni sull'errore.

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

Il set di risultati è il seguente.

-----------

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