Anatomia błędu i błędy niemożliwe do przechwycenia

Transakcje i obsługa błędów w SQL Server

Miriam Antona

Software Engineer

Anatomia błędu

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).
Transakcje i obsługa błędów w SQL Server

Anatomia błędu

Numer błędu

Komunikat błędu z wyróżnionym tekstem „Msg 2627", odpowiadającym numerowi błędu.

  • Błędy SQL: od 1 do 49999
  • Własne błędy: od 50001
    select * from sys.messages
| message_id | language_id | severity | ... | text                                                            |
|------------|-------------|----------|-----|-----------------------------------------------------------------|
| ...        | ...         | ...      | ... | ...                                                             |
| 2627       | 1033        | 14       | ... | Violation of %ls constraint '%.*ls'. Cannot insert duplicate... |
| ...        | ...         | ...      | ... | ...                                                             |
Transakcje i obsługa błędów w SQL Server

Anatomia błędu

Poziom ważności

Komunikat błędu z wyróżnionym tekstem „Level 14", odpowiadającym poziomowi ważności błędu.

  • 0-10: komunikaty informacyjne
  • 11-16: błędy do poprawy przez użytkownika (naruszenie ograniczenia itp.)
  • 17-24: inne błędy (problemy z oprogramowaniem, błędy krytyczne)
Transakcje i obsługa błędów w SQL Server

Anatomia błędu

Stan

Komunikat błędu z wyróżnionym tekstem „State 1", odpowiadającym stanowi błędu.

  • 1: gdy błąd wyświetla SQL Server
  • 0-255: własne błędy
Transakcje i obsługa błędów w SQL Server

Anatomia błędu

Wiersz

Komunikat błędu z wyróżnionym tekstem „Line 1", odpowiadającym wierszowi, w którym wystąpił błąd.

Procedura

Komunikat błędu z wyróżnionym tekstem „Procedure Insert_product", odpowiadającym nazwie procedury składowanej, w której wystąpił błąd.

Transakcje i obsługa błędów w SQL Server

Błędy niemożliwe do przechwycenia

  • Ważność niższa niż 11 (11-19 można przechwycić)

  • Ważność 20 lub wyższa — przerywa połączenie

  • Błędy kompilacji: nieistniejące obiekty i kolumny

Transakcje i obsługa błędów w SQL Server

Błędy niemożliwe do przechwycenia — przykład błędu kompilacji

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'.
Transakcje i obsługa błędów w SQL Server

Czas na ćwiczenia!

Transakcje i obsługa błędów w SQL Server

Preparing Video For Download...