Le try catch nouvellement ajouté dans SQL Server 2005 peut facilement détecter les exceptions. Je vais y jeter un œil aujourd'hui et résumer les points clés comme suit.
Utilisation de base BEGIN TRY.
{ déclaration_sql |
bloc_instruction }
FIN ESSAYER
COMMENCER LA CAPTURE
{ déclaration_sql |
bloc_instruction }
FIN DE CAPTURE
, similaire à l'utilisation de la gestion des exceptions dans les langages ordinaires, mais il convient de noter que SQL SERVER n'intercepte que les exceptions qui ne sont pas sérieuses. Lorsque des exceptions telles que la base de données ne peuvent pas être connectées, etc., elles ne peuvent pas être interceptées. COMMENCER ESSAYER
DÉCLARER @X INT
- Diviser par zéro pour générer une erreur
FIXER @X = 1/0
PRINT 'Commande après erreur dans le bloc TRY'
FIN ESSAYER
COMMENCER LA CAPTURE
IMPRIMER 'Erreur détectée'
FIN DE CAPTURE
PRINT 'Commande après les blocs TRY/CATCH'
De plus, try catch peut être imbriqué dans Begin TRY
supprimer de GrandParent où Nom = 'John Smith'
imprimer 'GrandParent supprimé avec succès'
Fin Essayer
Commencer la capture
Imprimer « Erreur lors de la suppression de l'enregistrement des grands-parents »
Commencer Essayer
supprimer du parent où GrandParentID =
(sélectionnez un identifiant distinct de GrandParent où Name = 'John Smith')
Imprimer « Parent supprimé avec succès »
Fin Essayer
Commencer la capture
imprimer 'Erreur lors de la suppression du parent'
Commencer Essayer
supprimer de l'enfant où ParentId =
(sélectionnez un identifiant distinct du parent où GrandParentID =
(sélectionnez un identifiant distinct de GrandParent où Nom = 'John Smith'))
imprimer 'Enfant supprimé avec succès'
Fin Essayer
Commencer la capture
Imprimer « Erreur lors de la suppression de l'enfant »
Fin de la capture
Fin de la capture
Fin de la capture
De plus, SQL SERVER 2005 fournit des méthodes de classe d'erreur dans le mécanisme d'exception pour faciliter le débogage. Elle est extraite comme suit, ce qui est relativement simple et ne sera pas expliqué : Renvoie un numéro associé à l'erreur.ERROR_SEVERITY() : Renvoie la gravité de l'erreur.ERROR_STATE() : renvoie le numéro d'état d'erreur associé à l'erreur.ERROR_PROCEDURE() : renvoie le nom de la procédure stockée ou du déclencheur dans lequel l'erreur s'est produite.ERROR_LINE() : renvoie le numéro de ligne à l'intérieur du routine défaillante qui a provoqué l'erreur. ERROR_MESSAGE() : renvoie le texte complet du message d'erreur. Le texte inclut les valeurs fournies pour tous les paramètres substituables, tels que les longueurs, les noms d'objet ou les heures. en utilisant la méthode de classe d'erreur BEGIN TRY
DÉCLARER @X INT
- Diviser par zéro pour générer une erreur
FIXER @X = 1/0
PRINT 'Commande après erreur dans le bloc TRY'
FIN ESSAYER
COMMENCER LA CAPTURE
IMPRIMER 'Erreur détectée'
SELECT ERROR_NUMBER() ERNuméro,
ERROR_SEVERITY() Erreur_Severity,
ERROR_STATE() État_erreur,
ERROR_PROCEDURE() Erreur_Procédure,
ERROR_LINE() Ligne_Erreur,
ERROR_MESSAGE() Message_d'erreur
FIN DE CAPTURE
PRINT 'Commande après les blocs TRY/CATCH'
Erreur de sortie enfin détectée
Err_Num Err_Sev Err_State Err_Proc Err_Line Err_Msg
------- ------- --------- ---------- ------- ----------------------------------
8134 16 1 NULL 4 Erreur de division par zéro rencontrée
Source : jackyrong BLOG.