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.

Icône Lien de rubriqueConventions de la syntaxe de Transact-SQL

Syntaxe

ERROR_PROCEDURE ( )

Types de retour

nvarchar(126)

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 de ERROR_PROCEDURE dans un bloc CATCH

L'exemple de code suivant montre une procédure stockée qui génère 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 AdventureWorks;
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 de 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 AdventureWorks;
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