Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Qu'est-ce que SQL Server RAISERROR ?

Lorsque quelque chose ne va pas dans votre T-SQL, vous souhaitez résoudre le problème rapidement avec un minimum de recherches et de perturbations pour les utilisateurs. Les messages d'erreur générés par SQL Server sont très techniques et difficiles à comprendre, ce qui peut compliquer l'identification des problèmes et ralentir le temps de résolution. Heureusement, les DBA peuvent implémenter SQL Server RAISERROR comme alternative aux messages d'erreur SQL Server.

RAISERROR est une instruction de gestion des erreurs SQL Server qui génère un message d'erreur et lance le traitement des erreurs. RAISERROR peut soit faire référence à un message défini par l'utilisateur qui est stocké dans la vue catalogue sys.messages, soit créer un message de manière dynamique. Le message est renvoyé en tant que message d'erreur du serveur à l'application appelante ou à un bloc CATCH associé d'une construction TRY...CATCH.

Il existe plusieurs scénarios dans lesquels il convient d'utiliser l'instruction RAISERROR :

  • Dépannage du code Transact-SQL
  • Renvoyer les messages contenant du texte variable
  • Examiner les valeurs des données
  • Lorsque vous avez besoin que l'exécution passe d'un bloc TRY au bloc CATCH associé ou renvoie des informations d'erreur du bloc CATCH aux appelants

Il est important de noter que lors du développement de nouvelles applications, une instruction THROW est désormais préférable à RAISERROR pour la gestion des erreurs. Mais nous en reparlerons plus tard.

Pourquoi utiliser RAISERROR pour la gestion des erreurs SQL Server ?

Il existe deux raisons principales pour choisir RAISERROR plutôt que la gestion des erreurs générées par SQL Server :

  1. Les messages RAISERROR sont personnalisables en fonction du niveau de gravité et de l'état
  2. Ils peuvent être écrits dans un langage naturel facile à comprendre

RAISERROR renvoie des messages d'erreur à l'application dans le même format que celui généré par le moteur de base de données SQL Server. Il permet aux développeurs de générer leurs propres messages d'erreur, afin que toute personne lisant le message puisse comprendre quel est le problème réel au lieu d'essayer de déchiffrer le message d'erreur technique de SQL Server. Les développeurs peuvent également définir leur propre niveau de gravité, leur ID de message et leur état pour les messages d'erreur.

Utilisation de RAISERROR avec la construction TRY...CATCH

TRY...CATCH est une construction de gestion des erreurs qui vous permet d'exécuter du code dans la section TRY et de gérer les erreurs dans la section CATCH. En général, TRY...CATCH est un moyen efficace d'identifier de nombreuses erreurs T-SQL, mais il existe quelques exceptions.

Ce didacticiel fournit une présentation détaillée de l'utilisation de RAISERROR conjointement avec TRY...CATCH. L'auteur utilise un exemple montrant comment utiliser RAISERROR à l'intérieur d'un bloc TRY pour faire sauter l'exécution au bloc CATCH associé. Dans le bloc CATCH, l'auteur montre comment utiliser RAISERROR pour renvoyer les informations d'erreur qui ont invoqué le bloc CATCH. La sortie affiche l'ID du message, le niveau de gravité et l'état de l'erreur.

Instructions de gestion des erreurs RAISERROR et THROW

RAISERROR a été introduit dans SQL Server 7.0 et constitue un moyen efficace de gérer les erreurs T-SQL depuis de nombreuses années. Mais si vous développez de nouvelles applications, Microsoft recommande désormais d'utiliser les instructions THROW au lieu de RAISERROR.

Au fur et à mesure que les organisations effectuent la mise à jour vers SQL Server 2012 et versions ultérieures, RAISERROR est progressivement supprimé. En fait, RAISERROR ne peut pas être utilisé dans les procédures stockées nativement compilées de SQL Server 2014. THROW est considéré comme une amélioration par rapport à RAISERROR car il est plus facile à utiliser.

La documentation SQL Server de Microsoft détaille les différences entre les instructions de gestion des erreurs RAISERROR et THROW comme suit :

Instruction RAISERROR

  • Si un msg_id est passé à RAISERROR, l'ID doit être défini dans sys.messages.
  • Le paramètre msg_str peut contenir des styles de formatage printf.

Le paramètre de sévérité spécifie la sévérité de l'exception.

Instruction THROW

  • Le paramètre error_number n'a pas besoin d'être défini dans sys.messages.
  • Le paramètre de message n'accepte pas le formatage de style printf.
  • Il n'y a pas de paramètre de gravité. La gravité de l'exception est toujours définie sur 16.

Bien que les jours de RAISERROR soient comptés, il reste une option de gestion des erreurs viable sur les anciennes versions de SQL Server. Microsoft pousse les utilisateurs des nouvelles versions de SQL Server (SQL SERVER 2012 et versions ultérieures) à utiliser l'instruction THROW au lieu de RAISERROR pour implémenter la gestion des erreurs. Microsoft n'a pas encore annoncé l'abandon de RAISERROR, mais il semble probable qu'il le fera le plus tôt possible.