В MS SQL Server зарезервировано 50000 ошибок

При возникновении ошибок при работе программы, возникает ошибка, которую можно обработать (перехватить)

Есть 2 способа перехвата ошибок:

  • Через системную функцию @@ERROR
  • Через Try-Catch

@@ERROR

Когда возникает ошибка, вызов этой функции возвращает номер сообщения произошедшей ошибки

Минус такого подхода, что хранится только код последней произошедшей ошибки. Поэтому нужно либо сохранять данные об ошибке в переменную и обрабатывать ошибку потом, либо же обрабатывать на месте.

SELECT 100/0;
SELECT @@ERROR;

TRY-CATCH

Если ошибка происходит в блоке TRY, программа тут же перескакивает на связанный парный (обязательно должен быть) блок CATCH

Чтобы понять, какая ошибка произошла, есть инструкции:

  • ERROR_NUMBER() - возвращает номер произошедшей ошибки
  • ERROR_SEVERITY() - возвращает уровень серьезности произошедшей ошибки
  • ERROR_LINE() - возвращает номер строки, которая вызвала ошибку внутри программы
  • ERROR_MESSAGE() - возвращает полный текст сообщения об ошибок:
    • длина
    • имена связанных с ошибкой объектов
    • время

Выбрасывание собственных ошибок

RAISEERROR

Не рекомендуется использовать

Позволяет создавать выбрасывать собственные, заранее созданные ошибки с установленным уровнем серьезности, сообщением

Добавить собственное сообщение об ошибке можно вызовом sp_addmessage. Номера таких сообщений > 50000.

msg_id - номер сообщения об ошибке

msd_str - сообщения пользователя

severity - уровень серьезности:

  • 1 - ничего серьезного
  • 2-14 - информационный
  • 15 - предупреждение
  • 16 - 25 - ошибки

THROW

Лучше использовать эту инструкцию