J'ai lu que cela ERROR_STATE()
peut aider à distinguer les différents états / emplacements dans le code source où le même type d'erreur peut se produire. Mais il n'est pas vraiment clair pour moi que cela peut être utile.
MSDN déclare:
ERROR_STATE()
Renvoie le numéro d'état de l'erreur qui a provoqué l'exécution du bloc CATCH d'une construction TRY… CATCH.
Comment peut-on vraiment l'utiliser? Quelqu'un peut-il me donner un exemple, ceux fournis dans cet article de référence ne m'aident pas vraiment à bien expliquer les choses?
sql-server
sql-server-2008
error-handling
jaczjill
la source
la source
Error_State
et laError_Number
combinaison vous donnera une image plus claire d'une erreur. Jetez un œil à d'autres fonctions liées à la gestion des erreurs iciRéponses:
Le but des états d'erreur SQL Server est que l'équipe de développement SQL Server puisse identifier dans le code l'endroit exact où les erreurs système ont été déclenchées, étant donné que de nombreuses erreurs sont déclenchées à plusieurs endroits.
En tant qu'utilisateur final (c'est-à-dire développeur d'applications utilisant SQL Server), vous pouvez également utiliser l'état transmis
RAISERROR
afin que votre support produit puisse identifier l'endroit où une procédure génère une erreur, par exemple:Voyez comment les deux états vous permettent de distinguer plus tard quel cas d'erreur a été atteint. Avant de dire «mais je peux regarder le message d'erreur», je vous dis un mot: l'internationalisation.
la source
Non, cela ne vous aide pas à savoir où l'erreur s'est produite. Voici un petit exemple. Si vous essayez de diviser par 0, vous obtenez un message d'erreur avec un tas de détails:
Résultat:
Voir celui appelé
State
, avec une valeur de 1?ERROR_STATE()
renvoie cette valeur. Donc, si vous utilisezTRY/CATCH
:Résultat:
C'est tout. Pas utile dans la plupart des scénarios. Je suggère de lire davantage sur la gestion des erreurs en général avant de plonger trop profondément dans des fonctions spécifiques qui semblent utiles.
http://msdn.microsoft.com/en-us/library/ms175976.aspx
http://www.sommarskog.se/error_handling_2005.html
la source
Réponse courte - ça ne peut pas. Un ERROR_STATE est essentiellement une sous-division d'un ERROR_NUMBER. Il ne peut pas vous dire quelle ligne de code a provoqué l'erreur (sauf dans la mesure où ERROR_NUMBER et ERROR_STATE ensemble vous indiquent la cause de l'erreur, et il devient alors évident quelle est la cause).
la source