Partager via


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.

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

Syntaxe

ERROR_STATE ( )

Types des valeurs renvoyées

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 MicrosoftSQL ServerMoteur 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 de 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 AdventureWorks;
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 de 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 AdventureWorks;
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