ERROR_PROCEDURE (Transact-SQL)
Retourne le nom de la procédure stockée ou du déclencheur où une erreur ayant entraîné l'exécution du bloc CATCH d'une construction TRY…CATCH s'est produite.
Conventions de syntaxe de Transact-SQL
Syntaxe
ERROR_PROCEDURE ( )
Types de retour
nvarchar(128)
Valeur de retour
Lors de l'appel d'un bloc CATCH, retourne le nom de la procédure stockée où l'erreur s'est produite.
Retourne la valeur NULL si l'erreur ne s'est pas produite dans une procédure stockée ou un déclencheur.
Retourne la valeur NULL en cas d'appel en dehors de l'étendue d'un bloc CATCH.
Notes
ERROR_PROCEDURE peut être appelé n'importe où dans l'étendue d'un bloc CATCH.
ERROR_PROCEDURE retourne le nom de la procédure stockée ou du déclencheur où l'erreur s'est produite, indépendamment du nombre de fois qu'il ou qu'elle a été appelé ou de l'origine de l'appel dans l'étendue du bloc CATCH. Ce comportement contraste avec celui des fonctions, telles que @@ERROR, qui retournent le code d'erreur dans l'instruction suivant immédiatement celle ayant provoqué l'erreur ou dans la première instruction du bloc CATCH.
Dans les blocs CATCH imbriqués, ERROR_PROCEDURE retourne le nom de la procédure stockée ou du déclencheur propre à l'étendue du bloc CATCH dans lequel la procédure ou le déclencheur est référencé. Par exemple, le bloc CATCH d'une construction TRY…CATCH peut inclure un bloc TRY…CATCH imbriqué. Dans le bloc CATCH imbriqué, ERROR_PROCEDURE retourne le nom de la procédure stockée ou du déclencheur erroné qui a appelé le bloc CATCH imbriqué. Si ERROR_PROCEDURE s'exécute dans le bloc CATCH externe, l'instruction retourne le nom de la procédure stockée erronée qui a appelé ce bloc CATCH.
Exemples
A.Utilisation d'ERROR_PROCEDURE dans un bloc CATCH
L'exemple de code ci-dessous illustre une procédure stockée générant une erreur de division par zéro. ERROR_PROCEDURE retourne le nom de la procédure stockée dans laquelle l'erreur s'est produite.
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.Utilisation d'ERROR_PROCEDURE dans un bloc CATCH avec d'autres outils de gestion des erreurs
L'exemple de code ci-dessous illustre une procédure stockée générant une erreur de division par zéro. En plus du nom de la procédure stockée erronée, des informations sur l'erreur sont aussi précisées.
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