Anatomie des erreurs et erreurs impossibles à intercepter

Transactions et gestion des erreurs dans SQL Server

Miriam Antona

Software Engineer

Anatomie des erreurs

INSERT INTO products (product_name, stock, price)
    VALUES ('Trek Powerfly 5 - 2018', 10, 3499.99);
Msg 2627, Level 14, State 1, Line 1
Violation of UNIQUE KEY constraint 'unique_name'. 
Cannot insert duplicate key in object 'dbo.products'. 
The duplicate key value is (Trek Powerfly 5 - 2018).
Transactions et gestion des erreurs dans SQL Server

Anatomie des erreurs

Numéro d'erreur

Avertissement qui met en évidence le texte « Msg 2627 », correspondant au numéro d'erreur.

  • Erreurs SQL : 1 à 49 999
  • Erreurs personnalisées : à partir de 50 001
    select * from sys.messages
| message_id | language_id | severity | ... | text                                                            |
|------------|-------------|----------|-----|-----------------------------------------------------------------|
| ...        | ...         | ...      | ... | ...                                                             |
| 2627       | 1033        | 14       | ... | Violation of %ls constraint '%.*ls'. Cannot insert duplicate... |
| ...        | ...         | ...      | ... | ...                                                             |
Transactions et gestion des erreurs dans SQL Server

Anatomie des erreurs

Niveau de gravité

Un message d'erreur qui met en évidence le texte « Level 14 », correspondant au niveau de gravité de l'erreur.

  • 0-10 : messages d'information
  • 11-16 : erreurs corrigibles par l'utilisateur (violation de contrainte, etc.)
  • 17-24 : autres erreurs (problèmes logiciels, erreurs fatales)
Transactions et gestion des erreurs dans SQL Server

Anatomie des erreurs

État

Un message d'erreur qui met en évidence le texte « State 1 », correspondant à l'état de l'erreur.

  • 1 : si SQL Server affiche l'erreur
  • 0-255 : erreurs personnalisées
Transactions et gestion des erreurs dans SQL Server

Anatomie des erreurs

Ligne

Un message d'erreur qui met en évidence le texte « Line 1 », correspondant à la ligne où l'erreur s'est produite.

Procédure

Un message d'erreur qui met en évidence le texte « Procedure Insert_product », correspondant au nom de la procédure stockée où l'erreur s'est produite.

Transactions et gestion des erreurs dans SQL Server

Erreurs impossibles à intercepter

  • Gravité inférieure à 11 (11-19 sont interceptables)

  • Gravité de 20 ou plus qui interrompt la connexion

  • Erreurs de compilation : objets ou colonnes inexistants

Transactions et gestion des erreurs dans SQL Server

Erreurs impossibles à intercepter – Exemple d'erreur de compilation

BEGIN TRY
    SELECT non_existent_column FROM products;
END TRY
BEGIN CATCH
    SELECT 'You are in the CATCH block' AS message;
END CATCH
Msg 207, Level 16, State 1, Line 2
Invalid column name 'non_existent_column'.
Transactions et gestion des erreurs dans SQL Server

Passons à la pratique !

Transactions et gestion des erreurs dans SQL Server

Preparing Video For Download...