В 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
Лучше использовать эту инструкцию
