ERROR_PROCEDURE (Transact-SQL)
Restituisce il nome della stored procedure o del trigger in cui si è verificato un errore che ha causato l'esecuzione del blocco CATCH di un costrutto TRY…CATCH.
Convenzioni della sintassi Transact-SQL
Sintassi
ERROR_PROCEDURE ( )
Tipi restituiti
nvarchar(128)
Valore restituito
Quando viene chiamata in un blocco CATCH, restituisce il nome della stored procedure in cui si è verificato l'errore.
Restituisce NULL se l'errore non si è verificato all'interno di una stored procedure o un trigger.
Restituisce NULL se chiamata all'esterno dell'ambito di un blocco CATCH.
Osservazioni
La funzione ERROR_PROCEDURE può essere chiamata in qualsiasi punto nell'ambito di un blocco CATCH.
ERROR_PROCEDURE restituisce il nome della stored procedure o del trigger in cui si è verificato l'errore, indipendentemente dal numero di chiamate o dal punto in cui viene chiamata nell'ambito del blocco CATCH. Alcune funzioni, ad esempio @@ERROR, restituiscono invece il numero di errore nell'istruzione immediatamente successiva a quella che ha causato l'errore oppure nella prima istruzione del blocco CATCH.
Nel caso di blocchi CATCH nidificati, ERROR_PROCEDURE restituisce il nome della stored procedure o del trigger specifico dell'ambito del blocco CATCH in cui vi viene fatto riferimento. Ad esempio, il blocco CATCH di un costrutto TRY…CATCH potrebbe contenere un blocco TRY…CATCH nidificato. All'interno del blocco CATCH nidificato, ERROR_PROCEDURE restituisce il nome della stored procedure o del trigger in cui si è verificato l'errore che ha richiamato il blocco CATCH nidificato. Se la funzione ERROR_PROCEDURE viene eseguita nel blocco CATCH esterno, restituisce il nome della stored procedure o del trigger in cui è verificato l'errore che ha richiamato tale blocco CATCH.
Esempi
A.Utilizzo di ERROR_PROCEDURE in un blocco CATCH
Nell'esempio di codice seguente 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.
USE AdventureWorks2012;
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.Utilizzo di ERROR_PROCEDURE in un blocco CATCH con altri strumenti di gestione degli errori
Nell'esempio di codice seguente viene illustrata una stored procedure che genera un errore di divisione per zero. Oltre al nome della stored procedure in cui si è verificato l'errore, vengono restituite altre informazioni correlate all'errore.
USE AdventureWorks2012;
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