ПРИХОДИТЕ УЧИТЬСЯ НОВОЙ ПРОФЕССИИ ЛЕТОМ СО СКИДКОЙ ДО 70%Забронировать скидку

Правильное использование функции RAISERROR() в SQL: особенности синтаксиса

Пройдите тест, узнайте какой профессии подходите и получите бесплатную карьерную консультацию
В конце подарим скидку до 55% на обучение
Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Функция RAISERROR() в SQL Server позволяет тут же вызвать исключение, связанное с пользовательской ошибкой. Это исключение может изменить нормальный поток выполнения кода, причем степень данного изменения зависит от уровня серьезности. Функция принимает на вход следующие аргументы: RAISERROR('сообщение', серьезность, состояние). Уровень серьезности может быть любым значением в диапазоне от 0 (информационное сообщение) до 25 (критическая ошибка), а аргумент состояние помогает определить место возникновения ошибки.

Пример использования:

SQL
Скопировать код
RAISERROR('Ой! Ошибка деления на ноль', 16, 1);

В данном примере уровень серьезности равен 16, что обозначает ошибку в коде, которую может устранить сам пользователь. Понимание работы функции RAISERROR() важно для управления исключениями и выполнением кода в сложных скриптах T-SQL.

Пройдите тест и узнайте подходит ли вам сфера IT
Пройти тест

Серьезность и состояние – динамичный дуэт

Значение уровней серьезности

Уровни серьезности от 0 до 10 представляют собой предупреждения или информационные сообщения и не влияют на выполнение программы. Уровни от 11 до 16 указывают на ошибки, которые может исправить сам пользователь, переводя выполнение в блок CATCH. Уровни серьезности от 17 до 25 могут сигнализировать о серьезных проблемах, связанных с программным обеспечением или оборудованием, которые могут привести к остановке работы системы.

Состояние – отслеживание места возникновения ошибки

Аргумент функции состояние, принимаемый в виде целого числа от 0 до 255, помогает определить место возникновения ошибки в хранимых процедурах или триггерах. Назначая разные значения состояний для одинаковых ошибок, вы улучшаете их диагностику и упрощаете процесс устранения проблем.

Sysadmin – привилегия для высоких уровней серьезности

Уровни серьезности ошибок от 33 до 60 зарезервированы для пользователей с ролью sysadmin или для пользователей с правами ALTER TRACE. Эти уровни обычно используются в критических ситуациях, чтобы указать на серьезные проблемы системы.

Правильный подход к использованию RAISERROR

Создание информативных ошибок

SQL
Скопировать код
RAISERROR ('Превышен лимит зарплаты! Не более 1000', 16, 1) -- Необходим пересмотр финансовой политики 💰

В этом примере создано исключение, связанное с пользовательской ошибкой, с уровнем серьезности 16. Оно сигнализирует о нарушении бизнес-правил, которое можно исправить.

Использование RAISERROR в триггерах

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

Применение RAISERROR в блоке CATCH

Использование функции RAISERROR в блоке CATCH для повторной генерации или регистрации ошибок является хорошей практикой, обеспечивающей сохранение информации об исключениях, включая описание ошибки, ее уровень серьезности и состояние.

RAISERROR – акробатический номер

Выбор уровня серьезности в соответствии с бизнес-логикой

Для обработки бизнес-правил следует использовать уровни серьезности от 11 до 19, чтобы не нарушить работу приложения. Высшую ступень значения серьезности следует использовать только для критических системных ошибок.

Разделение ошибок в разных местах

Назначайте разные значения состояний для однотипных ошибок в различных процедурах или функциях. Это облегчит и ускорит процесс диагностики и отладки кода.

Последовательное управление ошибками

Следуйте единообразию при определении пользовательских ошибок. Используйте системную таблицу sys.messages и ссылки на ошибки через RAISERROR, чтобы упростить процесс управления ошибками и отладки.

Визуализация

Представьте функцию RAISERROR() как экстравагантного актера на сцене SQL:

SQL
Скопировать код
RAISERROR('Это мое сообщение об ошибке', 16, 1); -- Ясно и прямолинейно!

Сценарий:

Markdown
Скопировать код
Офис базы данных 🏢
- Рутинная работа: [🖥️, 📊, 🗃️, 👨‍💻]
- Вмешательство RAISERROR: [🖥️, 📊, 🚨, 👨‍💻]
🚨 – отображает серьезность проблемы
" " – ваше специфическое сообщение об ошибке

RAISERROR: сигнал тревоги в головном офисе SQL, где уровень серьезности обозначает важность проблемы, а значение состояния указывает на место в коде, где что-то пошло не так.

Полезные материалы