Правильное использование функции RAISERROR() в SQL: особенности синтаксиса
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Функция RAISERROR()
в SQL Server позволяет тут же вызвать исключение, связанное с пользовательской ошибкой. Это исключение может изменить нормальный поток выполнения кода, причем степень данного изменения зависит от уровня серьезности. Функция принимает на вход следующие аргументы: RAISERROR('сообщение', серьезность, состояние)
. Уровень серьезности может быть любым значением в диапазоне от 0 (информационное сообщение) до 25 (критическая ошибка), а аргумент состояние помогает определить место возникновения ошибки.
Пример использования:
RAISERROR('Ой! Ошибка деления на ноль', 16, 1);
В данном примере уровень серьезности равен 16, что обозначает ошибку в коде, которую может устранить сам пользователь. Понимание работы функции RAISERROR()
важно для управления исключениями и выполнением кода в сложных скриптах T-SQL.
Серьезность и состояние – динамичный дуэт
Значение уровней серьезности
Уровни серьезности от 0 до 10 представляют собой предупреждения или информационные сообщения и не влияют на выполнение программы. Уровни от 11 до 16 указывают на ошибки, которые может исправить сам пользователь, переводя выполнение в блок CATCH. Уровни серьезности от 17 до 25 могут сигнализировать о серьезных проблемах, связанных с программным обеспечением или оборудованием, которые могут привести к остановке работы системы.
Состояние – отслеживание места возникновения ошибки
Аргумент функции состояние, принимаемый в виде целого числа от 0 до 255, помогает определить место возникновения ошибки в хранимых процедурах или триггерах. Назначая разные значения состояний для одинаковых ошибок, вы улучшаете их диагностику и упрощаете процесс устранения проблем.
Sysadmin – привилегия для высоких уровней серьезности
Уровни серьезности ошибок от 33 до 60 зарезервированы для пользователей с ролью sysadmin или для пользователей с правами ALTER TRACE. Эти уровни обычно используются в критических ситуациях, чтобы указать на серьезные проблемы системы.
Правильный подход к использованию RAISERROR
Создание информативных ошибок
RAISERROR ('Превышен лимит зарплаты! Не более 1000', 16, 1) -- Необходим пересмотр финансовой политики 💰
В этом примере создано исключение, связанное с пользовательской ошибкой, с уровнем серьезности 16. Оно сигнализирует о нарушении бизнес-правил, которое можно исправить.
Использование RAISERROR в триггерах
Применение функции RAISERROR в триггерах помогает обеспечить согласованность выполнения кода, сигнализируя о нарушениях или нежелательных действиях.
Применение RAISERROR в блоке CATCH
Использование функции RAISERROR в блоке CATCH для повторной генерации или регистрации ошибок является хорошей практикой, обеспечивающей сохранение информации об исключениях, включая описание ошибки, ее уровень серьезности и состояние.
RAISERROR – акробатический номер
Выбор уровня серьезности в соответствии с бизнес-логикой
Для обработки бизнес-правил следует использовать уровни серьезности от 11 до 19, чтобы не нарушить работу приложения. Высшую ступень значения серьезности следует использовать только для критических системных ошибок.
Разделение ошибок в разных местах
Назначайте разные значения состояний для однотипных ошибок в различных процедурах или функциях. Это облегчит и ускорит процесс диагностики и отладки кода.
Последовательное управление ошибками
Следуйте единообразию при определении пользовательских ошибок. Используйте системную таблицу sys.messages и ссылки на ошибки через RAISERROR, чтобы упростить процесс управления ошибками и отладки.
Визуализация
Представьте функцию RAISERROR()
как экстравагантного актера на сцене SQL:
RAISERROR('Это мое сообщение об ошибке', 16, 1); -- Ясно и прямолинейно!
Сценарий:
Офис базы данных 🏢
- Рутинная работа: [🖥️, 📊, 🗃️, 👨💻]
- Вмешательство RAISERROR: [🖥️, 📊, 🚨, 👨💻]
🚨 – отображает серьезность проблемы
" " – ваше специфическое сообщение об ошибке
RAISERROR: сигнал тревоги в головном офисе SQL, где уровень серьезности обозначает важность проблемы, а значение состояния указывает на место в коде, где что-то пошло не так.