Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Использование RAISERROR  [new]
EvgenRU
Member

Откуда:
Сообщений: 2
Уважаемые форумчане, интересует возможность решения следующей задачи.

При наступлении определенного события должен запускаться триггер, внутри которого выполняются следующие шаги:
1. Отправка e-mail с помощью хранимой процедуры msdb.dbo.sp_send_dbmail;
2. Вызов сообщения об ошибки с помощью RAISERROR.

Реально ли это?

На практике: есть электронные документы и есть статусы этих документов (например, Открыт и Закрыт), для пользователя перевод из статуса Открыт в Закрыт запрещен, таким образом:
1. Пользователь меняет статус документа;
2. Нажимает сохранить - срабатывает триггер;
3. Отправляется email-сообщение о попытке смены статуса на определенный адрес;
4. Пользователь получает сообщение о запрете такого действия.

Заранее спасибо за помощь!
19 июл 17, 16:36    [20658386]     Ответить | Цитировать Сообщить модератору
 Re: Использование RAISERROR  [new]
Rankatan
Member

Откуда:
Сообщений: 250
Alert есть, можно настроить, что если происходит RAISERROR с номером таким то, то отправлять письмо.

Ошибки сами можем добавлять:
EXECUTE sp_AddMessage
@msgnum = 50001 --номер ошибки
©severity = 19 --серезность
@msgtext = 'Некорректное сочетание параметров!'
@with_Log = 'TRUE' --указываем, что аудит может отловить

в коде RAISERROR (50001, 19,1) WITH LOG --такую ошибку можно будет перехватить через алерт
19 июл 17, 16:43    [20658399]     Ответить | Цитировать Сообщить модератору
 Re: Использование RAISERROR  [new]
EvgenRU
Member

Откуда:
Сообщений: 2
Rankatan, спасибо за оперативный ответ, попробую!
19 июл 17, 17:04    [20658462]     Ответить | Цитировать Сообщить модератору
 Re: Использование RAISERROR  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
ну вообщем всё выше вполне да, только разве, что THROW вместо RASIERROR
19 июл 17, 17:12    [20658485]     Ответить | Цитировать Сообщить модератору
 Re: Использование RAISERROR  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7764
Только:

2. Нажимает сохранить (нажимает на что?) - выполняет процедуру, изменяющую статус документа. Процедура проверяет статус, отправляет письмо и изменяет статус, если требуется.
19 июл 17, 18:17    [20658690]     Ответить | Цитировать Сообщить модератору
 Re: Использование RAISERROR  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7764
TaPaK,

здесь, как говорится, бабушка надвое сказала, т.к. sp_AddMessage удобно использовать для добавления параметризованных сообщений, а параметризованные THROW не обрабатывает.
19 июл 17, 18:19    [20658693]     Ответить | Цитировать Сообщить модератору
 Re: Использование RAISERROR  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Владислав Колосов
TaPaK,

здесь, как говорится, бабушка надвое сказала, т.к. sp_AddMessage удобно использовать для добавления параметризованных сообщений, а параметризованные THROW не обрабатывает.

что-что за сказочки? THROW это скорее всего будет замещать RAISERROR который выпилят, правда сроки могут быть ооочень длительными.

EXEC sys.sp_addmessage  
     @msgnum   = 60000  
,@severity = 16  
,@msgtext  = N'This is a test message with one numeric parameter (%d), one string parameter (%s), and another string parameter (%s).'  
    ,@lang = 'us_english';   
GO  

DECLARE @msg NVARCHAR(2048) = FORMATMESSAGE(60000, 500, N'First string', N'second string');   

THROW 60000, @msg, 1;  
20 июл 17, 08:49    [20659700]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить