Будова помилки та неперехоплювані помилки

Транзакції та обробка помилок у SQL Server

Miriam Antona

Software Engineer

Будова помилки

INSERT INTO products (product_name, stock, price)
    VALUES ('Trek Powerfly 5 - 2018', 10, 3499.99);
Msg 2627, Level 14, State 1, Line 1
Порушення обмеження UNIQUE KEY 'unique_name'. 
Неможливо вставити дубльований ключ в об'єкт 'dbo.products'. 
Значення дубльованого ключа: (Trek Powerfly 5 - 2018).
Транзакції та обробка помилок у SQL Server

Будова помилки

Номер помилки

Повідомлення про помилку з виділеним «Msg 2627», яке відповідає номеру помилки.

  • Помилки SQL: від 1 до 49999
  • Власні помилки: від 50001
    select * from sys.messages
| message_id | language_id | severity | ... | text                                                            |
|------------|-------------|----------|-----|-----------------------------------------------------------------|
| ...        | ...         | ...      | ... | ...                                                             |
| 2627       | 1033        | 14       | ... | Violation of %ls constraint '%.*ls'. Cannot insert duplicate... |
| ...        | ...         | ...      | ... | ...                                                             |
Транзакції та обробка помилок у SQL Server

Будова помилки

Рівень критичності

Повідомлення про помилку з виділеним «Level 14», що відповідає рівню критичності помилки.

  • 0–10: інформаційні повідомлення
  • 11–16: помилки, які користувач може виправити (порушення обмеження тощо)
  • 17–24: інші помилки (проблеми ПЗ, фатальні помилки)
Транзакції та обробка помилок у SQL Server

Будова помилки

Стан

Повідомлення про помилку з виділеним «State 1», що відповідає стану помилки.

  • 1: якщо помилку показує SQL Server
  • 0–255: власні помилки
Транзакції та обробка помилок у SQL Server

Будова помилки

Рядок

Повідомлення про помилку з виділеним «Line 1», що відповідає рядку, де сталася помилка.

Процедура

Повідомлення про помилку з виділеним «Procedure Insert_product», що відповідає назві збереженої процедури, де сталася помилка.

Транзакції та обробка помилок у SQL Server

Неперехоплювані помилки

  • Критичність нижча за 11 (11–19 можна перехопити)

  • Критичність 20 або вище, що розриває підключення

  • Помилки компіляції: об'єкти чи стовпці, яких не існує

Транзакції та обробка помилок у SQL Server

Неперехоплювані помилки — приклад помилки компіляції

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
Некоректна назва стовпця 'non_existent_column'.
Транзакції та обробка помилок у SQL Server

Давайте потренуємось!

Транзакції та обробка помилок у SQL Server

Preparing Video For Download...