Utilisation de TRY/CATCH pour gérer les erreurs de SQL Server

click fraud protection

L'instruction TRY/CATCH dans Transact-SQL détecte et gère les conditions d'erreur dans les applications de base de données. Cette déclaration est la pierre angulaire de SQL La gestion des erreurs du serveur est un élément important du développement d'applications de base de données robustes.

TRY/CATCH s'applique à SQL Server à partir de 2008, Azure SQL Database, Azure SQL Data Warehouse et Parallel Data Warehouse.

Présentation de TRY/CATCH

TRY./CATCH fonctionne en spécifiant deux instructions Transact-SQL: une que vous souhaitez « essayer » et une autre à utiliser pour « intercepter » les erreurs qui pourraient survenir. Lorsque SQL Server rencontre une instruction TRY/CATCH, il exécute immédiatement l'instruction incluse dans la clause TRY. Si l'instruction TRY s'exécute avec succès, SQL Server continue. Toutefois, si l'instruction TRY génère une erreur, SQL Server exécute l'instruction CATCH pour gérer l'erreur correctement.

La syntaxe de base prend cette forme:

COMMENCER ESSAYER
{ instruction_sql | bloc d'instructions }
instagram viewer

TERMINER L'ESSAI
COMMENCER LA CAPTURE
[ { instruction_sql | bloc_instruction } ]
FIN DE CAPTURE
[; ]

ESSAYER/CATCH Exemple

Considérons une base de données de ressources humaines qui contient une table nommée des employés, qui contient des informations sur chacun des employés d'une entreprise. Cette table utilise un numéro d'identification d'employé entier comme clé primaire.

Vous pouvez essayer d'utiliser la déclaration ci-dessous pour insérer un nouvel employé dans votre base de données:

INSÉRER DANS les employés (id, first_name, last_name, extension)
VALEURS (12497, 'Mike', 'Chapple', 4201)

Dans des circonstances normales, cette instruction ajouterait une ligne à la table Employés. Cependant, si un employé avec l'ID 12497 existe déjà dans la base de données, l'insertion de la ligne violerait la contrainte de clé primaire et entraînerait l'erreur suivante:

Msg 2627, niveau 14, état 1, ligne 1
Violation de la contrainte PRIMARY KEY 'PK_employee_id'. Impossible d'insérer une clé en double dans l'objet 'dbo.employees'.
La déclaration est terminée.

Bien que cette erreur vous fournisse les informations dont vous avez besoin pour résoudre le problème, elle présente deux problèmes. Premièrement, le message est cryptique. Il comprend des codes d'erreur, des numéros de ligne et d'autres informations incompréhensibles pour l'utilisateur moyen. Deuxièmement, et plus important encore, cela provoque l'abandon de l'instruction et peut provoquer un blocage de l'application.

L'alternative consiste à envelopper l'instruction dans une instruction TRY…CATCH, comme illustré ici:

COMMENCER ESSAYER
INSÉRER DANS les employés( id, first_name, last_name, extension)
VALEURS (12497, 'Mike', 'Chapple', 4201)
TERMINER L'ESSAI
COMMENCER LA CAPTURE
PRINT 'ERREUR: ' + ERREUR_MESSAGE( );
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'Email de l'employé',
@destinataires = '[email protected]',
@body = 'Une erreur s'est produite lors de la création d'un nouvel enregistrement d'employé.',
@subject = 'Erreur de la base de données des employés' ;
FIN DE CAPTURE

Dans cet exemple, toutes les erreurs qui se produisent sont signalées à la fois à l'utilisateur exécutant la commande et à l'adresse e-mail [email protected]. L'erreur affichée à l'utilisateur est:

Erreur: Violation de la contrainte PRIMARY KEY 'PK_employee_id'. 
Impossible d'insérer une clé en double dans l'objet 'dbo.employees'.
Courrier en file d'attente.

L'exécution de l'application se poursuit normalement, permettant au programmeur de gérer l'erreur. L'utilisation de l'instruction TRY/CATCH est un moyen élégant de détecter et de gérer de manière proactive les erreurs qui se produisent dans les applications de base de données SQL Server.

Apprendre plus

Pour en savoir plus sur le langage de requête structuré, consultez notre article Fondamentaux de SQL.

instagram story viewer