ERROR_STATE (Transact-SQL)
Renvoie le numéro d'état de l'erreur qui a engendré l'exécution du bloc CATCH d'une construction TRY…CATCH.
Conventions de syntaxe de Transact-SQL
Syntaxe
ERROR_STATE ( )
Types de retour
int
Valeur de retour
Lorsqu'elle est appelée dans un bloc CATCH, elle renvoie le numéro d'état du message d'erreur à l'origine de l'exécution du bloc CATCH.
Renvoie la valeur NULL si elle est appelée en dehors d'un bloc CATCH.
Notes
Certains messages d'erreur peuvent apparaître en de multiples endroits du code de Microsoft SQL Server Moteur de base de données. L'erreur « 1105 » par exemple, peut être provoquée par différentes conditions. Chaque condition qui génère l'erreur attribue un code d'état unique.
Lorsque vous consultez des bases de données de problèmes connus, telles que la Base de connaissances Microsoft, vous pouvez utiliser le numéro d'état pour voir si le problème enregistré est identique à l'erreur que vous avez rencontrée. Par exemple, si un article de la Base de connaissances traite de l'erreur 1105 avec un état 2 et que l'erreur 1105 reçue était associée à un état 3, votre erreur avait probablement une autre cause que celle mentionnée dans l'article.
Un ingénieur technique de SQL Server peut également utiliser le code d'état pour déterminer l'emplacement du code d'erreur dans le code source et réaliser ainsi plus facilement un diagnostic.
ERROR_STATE peut être appelée depuis n'importe quel emplacement dans le champ d'un bloc CATCH.
ERROR_STATE renvoie l'état de l'erreur, indépendamment du nombre d'exécutions ou de l'endroit où elle est exécutée dans le champ du bloc CATCH. En revanche, des fonctions telles que @@ERROR renvoient uniquement le numéro d'erreur dans l'instruction qui suit celle à l'origine d'une erreur ou dans la première instruction d'un bloc CATCH.
Dans les blocs CATCH imbriqués, ERROR_STATE renvoie l'état d'erreur propre au champ du bloc CATCH dans lequel elle est référencée. Par exemple, le bloc CATCH d'une construction TRY...CATCH externe peut avoir une construction TRY...CATCH imbriquée. Dans un bloc CATCH imbriqué, ERROR_STATE renvoie l'état depuis l'erreur qui a appelé ce bloc. Si ERROR_STATE est exécutée dans le bloc CATCH externe, elle renvoie l'état à partir de l'erreur qui a appelé ce bloc CATCH.
Exemples
A.Utilisation d'ERROR_STATE dans un bloc CATCH
L'exemple suivant montre une instruction SELECT qui génère une erreur de division par zéro. L'état de l'erreur est renvoyé.
USE AdventureWorks2012;
GO
BEGIN TRY
-- Generate a divide by zero error
SELECT 1/0;
END TRY
BEGIN CATCH
SELECT ERROR_STATE() AS ErrorState;
END CATCH;
GO
B.Utilisation d'ERROR_STATE dans un bloc CATCH avec d'autres outils de gestion des erreurs
L'exemple suivant montre une instruction SELECT qui génère une erreur de division par zéro. Outre l'état de l'erreur, la procédure renvoie également les informations relatives à l'erreur.
USE AdventureWorks2012;
GO
BEGIN TRY
-- Generate a divide-by-zero error.
SELECT 1/0;
END TRY
BEGIN CATCH
SELECT
ERROR_NUMBER() AS ErrorNumber,
ERROR_SEVERITY() AS ErrorSeverity,
ERROR_STATE() AS ErrorState,
ERROR_PROCEDURE() AS ErrorProcedure,
ERROR_LINE() AS ErrorLine,
ERROR_MESSAGE() AS ErrorMessage;
END CATCH;
GO