Partager via


ERROR_PROCEDURE (Transact-SQL)

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Point de terminaison d’analytique SQL dans Microsoft FabricEntrepôt dans Microsoft FabricBase de données SQL dans Microsoft Fabric

Cette fonction retourne le nom de la procédure stockée ou du déclencheur où une erreur se produit, si cette erreur a provoqué l’exécution CATCH du bloc d’une TRY...CATCH construction.

  • SQL Server 2017 (14.x) et versions ultérieures retournent schema_name.stored_procedure_name
  • RETOUR SQL Server 2016 (13.x) et Azure SQL Database stored_procedure_name

Conventions de la syntaxe Transact-SQL

Syntaxe

ERROR_PROCEDURE ( )

Types de retour

nvarchar(128)

Valeur retournée

Lorsqu’elle est appelée dans un CATCH bloc, ERROR_PROCEDURE retourne le nom de la procédure stockée ou du déclencheur dans lequel l’erreur provient.

ERROR_PROCEDURE retourne NULL si l’erreur n’a pas eu lieu dans une procédure stockée ou un déclencheur.

ERROR_PROCEDURE retourne lorsqu’elle est NULL appelée en dehors de l’étendue d’un CATCH bloc.

Notes

ERROR_PROCEDURE prend en charge les appels n’importe où dans l’étendue d’un CATCH bloc.

ERROR_PROCEDURE retourne le nom de la procédure stockée ou du déclencheur où une erreur se produit, quel que soit le nombre de fois où il/elle s’exécute ou l’emplacement de son exécution dans l’étendue du bloc CATCH. Ce résultat contraste avec une fonction comme @@ERROR, qui retourne uniquement un numéro d’erreur dans l’instruction immédiatement après celle qui provoque une erreur.

Exemples : Azure Synapse Analytics et Analytics Platform System (PDW)

R. Utiliser ERROR_PROCEDURE dans un bloc CATCH

L’exemple suivant illustre 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 où l’erreur s’est produite.

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

Voici le jeu de résultats.

-----------

(0 row(s) affected)

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

(1 row(s) affected)

B. Utiliser ERROR_PROCEDURE dans un bloc CATCH avec d’autres outils de gestion des erreurs

L’exemple suivant illustre une procédure stockée qui génère une erreur de division par zéro. Outre le nom de la procédure stockée où l’erreur s’est produite, la procédure stockée retourne des informations sur cette erreur.

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

Voici le jeu de résultats.

-----------

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