Анатомия ошибок и неперехватываемые ошибки

Транзакции и обработка ошибок в 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
Violation of UNIQUE KEY constraint 'unique_name'. 
Cannot insert duplicate key in object 'dbo.products'. 
The duplicate key value is (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
Invalid column name 'non_existent_column'.
Транзакции и обработка ошибок в SQL Server

Давайте потренируемся!

Транзакции и обработка ошибок в SQL Server

Preparing Video For Download...