Anatomia degli errori ed errori non intercettabili

Transazioni e gestione degli errori in SQL Server

Miriam Antona

Software Engineer

Anatomia degli errori

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).
Transazioni e gestione degli errori in SQL Server

Anatomia degli errori

Numero errore

Un messaggio di errore che evidenzia il testo "Msg 2627", corrispondente al numero dell'errore.

  • Errori SQL: da 1 a 49999
  • Errori personalizzati: da 50001
    select * from sys.messages
| message_id | language_id | severity | ... | text                                                            |
|------------|-------------|----------|-----|-----------------------------------------------------------------|
| ...        | ...         | ...      | ... | ...                                                             |
| 2627       | 1033        | 14       | ... | Violation of %ls constraint '%.*ls'. Cannot insert duplicate... |
| ...        | ...         | ...      | ... | ...                                                             |
Transazioni e gestione degli errori in SQL Server

Anatomia degli errori

Livello di gravità

Un messaggio di errore che evidenzia il testo "Level 14", corrispondente al livello di gravità dell'errore.

  • 0-10: messaggi informativi
  • 11-16: errori correggibili dall'utente (violazioni di vincoli, ecc.)
  • 17-24: altri errori (problemi software, errori fatali)
Transazioni e gestione degli errori in SQL Server

Anatomia degli errori

Stato

Un messaggio di errore che evidenzia il testo "State 1", corrispondente allo stato dell'errore.

  • 1: se l'errore è mostrato da SQL Server
  • 0-255: errori personalizzati
Transazioni e gestione degli errori in SQL Server

Anatomia degli errori

Riga

Un messaggio di errore che evidenzia il testo "Line 1", corrispondente alla riga dove si è verificato l'errore.

Procedura

Un messaggio di errore che evidenzia il testo "Procedure Insert_product", corrispondente al nome della stored procedure in cui si è verificato l'errore.

Transazioni e gestione degli errori in SQL Server

Errori non intercettabili

  • Gravità minore di 11 (11-19 sono intercettabili)

  • Gravità da 20 in su che interrompe la connessione

  • Errori di compilazione: oggetti o colonne inesistenti

Transazioni e gestione degli errori in SQL Server

Errori non intercettabili - Esempio di errore di compilazione

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'.
Transazioni e gestione degli errori in SQL Server

Andiamo a praticare!

Transazioni e gestione degli errori in SQL Server

Preparing Video For Download...