ERROR_PROCEDURE (Transact-SQL)
S’applique à : SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) SQL analytics endpoint in Microsoft Fabric Warehouse in 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 entraîné l’exécution du bloc CATCH d’une construction TRY...CATCH.
- SQL Server 2017 thru current version retourne
schema_name.stored_procedure_name
- SQL Server 2016 retourne
stored_procedure_name
Conventions de la syntaxe Transact-SQL
Syntaxe
ERROR_PROCEDURE ( )
Types de retour
nvarchar(128)
Valeur de retour
Si elle est appelée dans un bloc CATCH, ERROR_PROCEDURE
retourne le nom de la procédure stockée ou du déclencheur d’où provient l’erreur.
ERROR_PROCEDURE
retourne la valeur NULL si l’erreur ne s’est pas produite dans une procédure stockée ou un déclencheur.
ERROR_PROCEDURE
retourne NULL quand l’appel a lieu en dehors de l’étendue d’un bloc CATCH.
Notes
ERROR_PROCEDURE
prend en charge les appels à partir de n’importe quel emplacement dans l’étendue d’un bloc CATCH.
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 comportement contraste avec celui d’une fonction comme @@ERROR, qui retourne uniquement un numéro d’erreur dans l’instruction immédiatement après celle qui a provoqué une erreur.
Exemples : Azure Synapse Analytics et Analytics Platform System (PDW)
R. Utilisation d'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 obtenu.
-----------
(0 row(s) affected)
ErrorProcedure
--------------------
usp_ExampleProc
(1 row(s) affected)
B. Utilisation d'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 obtenu.
-----------
(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)
Voir aussi
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)