ERROR_PROCEDURE (Transact-SQL)
Si applica a: SQL Server Database SQL di Azure Istanza gestita di SQL di Azure Azure Synapse Analytics Piattaforma di strumenti analitici (PDW) Endpoint di analisi SQL in Microsoft Fabric Warehouse in Microsoft Fabric
Questa funzione restituisce il nome della stored procedure o del trigger in cui si verifica un errore se tale errore ha causato l'esecuzione del blocco CATCH di un costrutto TRY...CATCH.
- SQL Server 2017 tramite la versione corrente restituisce
schema_name.stored_procedure_name
- SQL Server 2016 restituisce
stored_procedure_name
Convenzioni relative alla sintassi Transact-SQL
Sintassi
ERROR_PROCEDURE ( )
Tipi restituiti
nvarchar(128)
Valore restituito
Quando viene chiamato in un blocco CATCH, ERROR_PROCEDURE
restituisce il nome della stored procedure o del trigger in cui si è verificato l'errore.
ERROR_PROCEDURE
restituisce NULL se l'errore non si è verificato all'interno di una stored procedure o un trigger.
ERROR_PROCEDURE
restituisce NULL quando viene chiamata all'esterno dell'ambito di un blocco CATCH.
Osservazioni:
ERROR_PROCEDURE
supporta le chiamate da un qualsiasi punto nell'ambito di un blocco CATCH.
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 tipo di comportamento è in contrasto con una funzione come @@ERROR, che restituisce solo un numero di errore nell'istruzione immediatamente successiva a quella che ha provocato un errore.
Esempi: Azure Synapse Analytics e Piattaforma di strumenti analitici (PDW)
R. Utilizzo di 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. Utilizzo di 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)
Vedi anche
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)