Вы также можете определить предупреждающее сообщение, которое будет возникать в качестве ответа на уровень ошибки. Каждая системная ошибка имеет соответствующий уровень, который является числом между 0 и 25.
Чем выше уровень, тем серьезнее ошибка. Ошибки с уровнем от 20 до 25 являются фатальными ошибками. Ошибки с уровнем от 19 до 25 записываются в протокол приложения Windows.
В качестве примера того, как вы можете создавать предупреждающие сообщения для различных степеней ошибки, рассмотрим использование SQL Server Management Studio для создания конкретного предупреждающего сообщения для степени 25. Вначале разверните узел SQL Server Agent, щелкните правой кнопкой мыши по узлу Alerts, а затем выберите пункт New Alert. В поле Name введите имя этого предупреждающего сообщения (например, Severity 25 errors). В поле Туре выберите SQL Server event alert. Из раскрывающегося списка Database name выберите базу данных sample. Установите переключатель Severity и выберите 025 - Fatal Error.
На странице Response введите один или более операторов для уведомлений по электронной почте, пейджеру и/или командой net send при появлении ошибки со степенью 25.
Создание предупреждающих сообщений для ошибок, определенных пользователем
В дополнение к предупреждающим сообщениям для системных ошибок вы можете создавать предупреждающие настраиваемые сообщения об ошибках для отдельных приложений базы данных.
Если вы хотите создать предупреждающие сообщения для определенных пользователем ошибок, вам нужно выполнить следующие шаги:
1. Создать сообщение об ошибке.
2. Вызвать ошибку в приложении базы данных.
3. Определить предупреждающее сообщение на сообщение об ошибке.
Пример является лучшим способом иллюстрации создания подобного предупреждающего сообщения: сообщение выдается, если дата отгрузки продукции указана более ранняя, чем дата заказа. (Определение таблицы sales.)
Создание сообщения об ошибке. Для создания определенного пользователем сообщения об ошибке вы можете использовать SQL Server Management Studio или хранимую процедуру sp_addmessage. В примере 18.2 создается сообщение об ошибке для данного примера с помощью хранимой процедуры sp_addmessage.
Хранимая процедура spaddmessage создает определенное пользователем сообщение об ошибке с номером ошибки 50010 (параметр gmsgnum) и уровнем 16 (параметр @severity). Все определенные пользователем сообщения об ошибках хранятся в системной таблице sysmessages базы данных master и могут быть просмотрены с использованием представления просмотра каталогов sys .messages. Номер ошибки в примере 18.2 задан значением 50010, потому что все определенные пользователем ошибки должны иметь номер больше чем 50000. (Все номера сообщений об ошибках, меньшие, чем 50000, резервируются для системы.)
Для каждого определенного пользователем сообщения об ошибке вы можете при желании задать язык, в котором отображается это сообщение, используя параметр @iang. Эта спецификация может быть необходимой, если на вашем компьютере выполнена инсталляция с несколькими языками. (Когда язык не указан, языком сессии будет язык по умолчанию.)
По умолчанию определенные пользователем сообщения не записываются в протокол приложений Windows. С другой стороны, вы должны записывать сообщения в этот протокол, если хотите для него вызывать предупреждающее сообщение. Если вы в системной процедуре spaddmessage установите параметр @with_iog в true, то сообщение будет записываться в этот протокол.
Вызов ошибки с помощью триггера. Для вызова ошибки из приложения базы данных вы используете оператор raiserror. Этот оператор возвращает определенное пользователем сообщение об ошибке и устанавливает системный флаг в глобальной переменной @@error. Вы также можете обработать сообщения об ошибках, используя блоки try/catch.
В примере 18.3 создается триггер t_date_comp, который возвращает определенную пользователем ошибку 50010, если дата отгрузки продукции более ранняя, чем дата заказа.
Теперь если вы добавляете следующую строку в таблицу sales, где дата отгрузки продукции более ранняя, чем дата заказа INSERT INTO sales VALUES (1, '01.01.2007', '01.01.2006') то система вернет определенное пользователем сообщение об ошибке:
Msg 50010, Level 16, State 1, Procedure t_date_comp, Line 8