Skip to main content

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

Sniper Black Ops !! ;) (Avril 2025)

Sniper Black Ops !! ;) (Avril 2025)
Anonim

L'instruction TRY… CATCH de 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 la gestion des erreurs SQL Server et constitue un élément important du développement d'applications de base de données robustes. TRY … CATCH s'applique à SQL Server à partir de 2008, base de données Azure SQL, Azure SQL Data Warehouse et Parallel Data Warehouse.

Présentation de TRY … CATCH

TRY … CATCH fonctionne en vous permettant de spécifier deux instructions Transact-SQL: une que vous souhaitez "essayer" et une autre à utiliser pour "intercepter" les erreurs éventuelles. 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 correctement, 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:

COMMENCE ESSAYER bloc d'instructions FIN ESSAYERCOMMENCER À PRENDREsql_statementFIN DE CAPTURE ;

TRY … CATCH Exemple

Il est facile de comprendre l'utilisation de cette déclaration à travers un exemple. Imaginez que vous soyez l'administrateur d'une base de données de ressources humaines contenant une table nommée "Employés" contenant des informations sur chacun des employés de votre organisation. Cette table utilise un numéro 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:

INSERER DANS les employés (id, prenom, nom, extension)VALEURS (12497, 'Mike', 'Chapple', 4201)

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

Msg 2627, Niveau 14, Etat 1, Ligne 1Violation de la contrainte PRIMARY KEY 'PK_employee_id'. Impossible d'insérer une clé en double dans l'objet 'dbo.employees'.La déclaration a été terminée.

Bien que cette erreur vous fournisse les informations nécessaires pour résoudre le problème, elle pose deux problèmes. Premièrement, le message est crypté. 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, il provoque l’abandon de l’instruction et peut provoquer un blocage de l’application.L'alternative consiste à envelopper la déclaration dans une déclaration TRY… CATCH, comme indiqué ci-dessous:

COMMENCE ESSAYERINSERER DANS les employés (id, prenom, nom, extension)VALEURS (12497, 'Mike', 'Chapple', 4201)FIN ESSAYERCOMMENCER À PRENDREIMPRESSION 'ERREUR:' + ERROR_MESSAGE ();EXEC msdb.dbo.sp_send_dbmail@profile_name = 'Mail des employés',@recipients = '[email protected]',@body = 'Une erreur s'est produite lors de la création d'un nouvel enregistrement d'employé.',@subject = 'Erreur de duplication d'ID d'employé';FIN DE CAPTURE

Dans cet exemple, les erreurs éventuelles sont signalées à l'utilisateur qui exécute la commande et à l'adresse de messagerie [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'.Mail 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

Si vous souhaitez en savoir plus sur le langage de requête structuré, consultez Introduction à SQL.