Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 триггер, raiserror и msdb.dbo.sp_send_dbmail  [new]
NewIvanovec
Member

Откуда: Msk
Сообщений: 581
есть триггер, в котором при определенном условии срабатывает raiserror. как сделать так, чтобы в случае raiserror ещё отрабатывал msdb.dbo.sp_send_dbmail.

в коде ниже msdb.dbo.sp_send_dbmail @profile_name не работает

IF (@date_open<> @saldo_date)
	      
	    BEGIN
	        EXEC msdb.dbo.sp_send_dbmail @profile_name = 'email_from_it',
	             @recipients = '2@ivanovo.ru',	             
	             @blind_copy_recipients = '3@ivanovo.ru',
	             @subject = @subj_letter,
	             @body = @fraza;
	       raiserror('Ошибка в счёте', 16, -1)
	    END
19 июл 17, 15:03    [20657944]     Ответить | Цитировать Сообщить модератору
 Re: триггер, raiserror и msdb.dbo.sp_send_dbmail  [new]
o-o
Guest
задействовать брокер и сложить, что надо, в очередь?
19 июл 17, 15:14    [20657997]     Ответить | Цитировать Сообщить модератору
 Re: триггер, raiserror и msdb.dbo.sp_send_dbmail  [new]
q
Guest
EXEC msdb.dbo.sp_send_dbmail должен быть ПОСЛЕ rollback (он же у тебя есть в тригере ?)
19 июл 17, 15:19    [20658029]     Ответить | Цитировать Сообщить модератору
 Re: триггер, raiserror и msdb.dbo.sp_send_dbmail  [new]
NewIvanovec
Member

Откуда: Msk
Сообщений: 581
q
EXEC msdb.dbo.sp_send_dbmail должен быть ПОСЛЕ rollback (он же у тебя есть в тригере ?)

ролбэка нет
19 июл 17, 15:22    [20658048]     Ответить | Цитировать Сообщить модератору
 Re: триггер, raiserror и msdb.dbo.sp_send_dbmail  [new]
invm
Member

Откуда: Москва
Сообщений: 9114
NewIvanovec
в коде ниже msdb.dbo.sp_send_dbmail @profile_name не работает
Транзакцию не нужно откатывать. Либо отправлять почту уже после отката.
19 июл 17, 15:25    [20658069]     Ответить | Цитировать Сообщить модератору
 Re: триггер, raiserror и msdb.dbo.sp_send_dbmail  [new]
NewIvanovec
Member

Откуда: Msk
Сообщений: 581
o-o
задействовать брокер и сложить, что надо, в очередь?

можно немного подробнее?
19 июл 17, 15:36    [20658130]     Ответить | Цитировать Сообщить модератору
 Re: триггер, raiserror и msdb.dbo.sp_send_dbmail  [new]
NewIvanovec
Member

Откуда: Msk
Сообщений: 581
invm
NewIvanovec
в коде ниже msdb.dbo.sp_send_dbmail @profile_name не работает
Транзакцию не нужно откатывать. Либо отправлять почту уже после отката.

у меня в триггере нет транзакции. только raiserror при срабатывании условия
19 июл 17, 15:37    [20658134]     Ответить | Цитировать Сообщить модератору
 Re: триггер, raiserror и msdb.dbo.sp_send_dbmail  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36686
NewIvanovec
invm
пропущено...
Транзакцию не нужно откатывать. Либо отправлять почту уже после отката.

у меня в триггере нет транзакции
Это вы сейчас про какую СУБД?
19 июл 17, 15:37    [20658137]     Ответить | Цитировать Сообщить модератору
 Re: триггер, raiserror и msdb.dbo.sp_send_dbmail  [new]
invm
Member

Откуда: Москва
Сообщений: 9114
NewIvanovec
у меня в триггере нет транзакции
В MSSQL триггеры всегда выполняются в транзакции.

ЗЫ: И неплохо бы расшифровать что означает "не работает".
19 июл 17, 15:49    [20658195]     Ответить | Цитировать Сообщить модератору
 Re: триггер, raiserror и msdb.dbo.sp_send_dbmail  [new]
NewIvanovec
Member

Откуда: Msk
Сообщений: 581
invm
NewIvanovec
у меня в триггере нет транзакции
В MSSQL триггеры всегда выполняются в транзакции.

ЗЫ: И неплохо бы расшифровать что означает "не работает".

не работает означает, что письмо не отправляется
19 июл 17, 15:51    [20658207]     Ответить | Цитировать Сообщить модератору
 Re: триггер, raiserror и msdb.dbo.sp_send_dbmail  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7383
NewIvanovec
invm
пропущено...
Транзакцию не нужно откатывать. Либо отправлять почту уже после отката.

у меня в триггере нет транзакции. только raiserror при срабатывании условия


Куда же транзакция делась? :) Чудес не бывает в математике :)
19 июл 17, 15:54    [20658220]     Ответить | Цитировать Сообщить модератору
 Re: триггер, raiserror и msdb.dbo.sp_send_dbmail  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7383
o-o
задействовать брокер и сложить, что надо, в очередь?


Оно и так через брокер работает. Другое дело, что потребуется права назначать кому попало для доступа к процедуре.
19 июл 17, 15:56    [20658225]     Ответить | Цитировать Сообщить модератору
 Re: триггер, raiserror и msdb.dbo.sp_send_dbmail  [new]
NewIvanovec
Member

Откуда: Msk
Сообщений: 581
CREATE TRIGGER [test].[test]
ON [test].[accounts] 
   AFTER UPDATE
AS
BEGIN
	DECLARE @id INT
	SET @id = 1
	
	
	IF (@id = 1)
	BEGIN
	    EXEC msdb.dbo.sp_send_dbmail @profile_name = 'email_from_it',
	         @recipients = 'test@testbank.ru',
	         @subject = 'test',
	         @body = 'test';
	    	    	    	    
	    RAISERROR('Ошибка в счёте_accounts', 11, -1)
	END
END

не отправляется письмо. если RAISERROR убрать, то письмо отправится. но RAISERROR нужен
25 июл 17, 15:49    [20673689]     Ответить | Цитировать Сообщить модератору
 Re: триггер, raiserror и msdb.dbo.sp_send_dbmail  [new]
Владислав Колосов
Member

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

Всё не так. Напишите процедуру. Выполняйте проверки в начале. Добавляйте в таблицу только валидные данные, иначе отсылайте письмо. Если есть риск нарушения целостности и достоверности из-за прямого вмешательства админа - добавьте ограничения на таблицу.

Бизнес-процессы в триггеры не заталкивают.
25 июл 17, 16:04    [20673756]     Ответить | Цитировать Сообщить модератору
 Re: триггер, raiserror и msdb.dbo.sp_send_dbmail  [new]
NewIvanovec
Member

Откуда: Msk
Сообщений: 581
Владислав Колосов
NewIvanovec,

Всё не так. Напишите процедуру. Выполняйте проверки в начале. Добавляйте в таблицу только валидные данные, иначе отсылайте письмо. Если есть риск нарушения целостности и достоверности из-за прямого вмешательства админа - добавьте ограничения на таблицу.

Бизнес-процессы в триггеры не заталкивают.


доступа к логике приложения у меня нет.
есть только доступ к БД.
25 июл 17, 16:09    [20673779]     Ответить | Цитировать Сообщить модератору
 Re: триггер, raiserror и msdb.dbo.sp_send_dbmail  [new]
Konst_One
Member

Откуда:
Сообщений: 11512
- создайте табличку , в которую добавляйте задания на отправку почты из вашего триггера по нужным событиям.
- настройте job, который будет отправлять ваши письма из этой таблички заданий
25 июл 17, 16:14    [20673808]     Ответить | Цитировать Сообщить модератору
 Re: триггер, raiserror и msdb.dbo.sp_send_dbmail  [new]
NewIvanovec
Member

Откуда: Msk
Сообщений: 581
Konst_One
- создайте табличку , в которую добавляйте задания на отправку почты из вашего триггера по нужным событиям.
- настройте job, который будет отправлять ваши письма из этой таблички заданий

я так делал. insert почему-то тоже откатывается
25 июл 17, 16:24    [20673852]     Ответить | Цитировать Сообщить модератору
 Re: триггер, raiserror и msdb.dbo.sp_send_dbmail  [new]
Konst_One
Member

Откуда:
Сообщений: 11512
а что вы хотели то, если транзакция откатывается
25 июл 17, 16:25    [20673859]     Ответить | Цитировать Сообщить модератору
 Re: триггер, raiserror и msdb.dbo.sp_send_dbmail  [new]
Konst_One
Member

Откуда:
Сообщений: 11512
NewIvanovec
Konst_One
- создайте табличку , в которую добавляйте задания на отправку почты из вашего триггера по нужным событиям.
- настройте job, который будет отправлять ваши письма из этой таблички заданий

я так делал. insert почему-то тоже откатывается


что-то я потерял нить разговора. у вас же триггер AFTER UPDATE
25 июл 17, 16:29    [20673885]     Ответить | Цитировать Сообщить модератору
 Re: триггер, raiserror и msdb.dbo.sp_send_dbmail  [new]
Konst_One
Member

Откуда:
Сообщений: 11512
вот простенькие примерчики триггеров, посмотрите как и что , ну и MSDN не забудьте конечно

https://www.aspsnippets.com/Articles/Simple-Insert-Update-and-Delete-Triggers-in-SQL-Server-with-example.aspx
25 июл 17, 16:32    [20673902]     Ответить | Цитировать Сообщить модератору
 Re: триггер, raiserror и msdb.dbo.sp_send_dbmail  [new]
Владислав Колосов
Member

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

Всё не так. Напишите процедуру. Выполняйте проверки в начале. Добавляйте в таблицу только валидные данные, иначе отсылайте письмо. Если есть риск нарушения целостности и достоверности из-за прямого вмешательства админа - добавьте ограничения на таблицу.

Бизнес-процессы в триггеры не заталкивают.


доступа к логике приложения у меня нет.
есть только доступ к БД.


Напишите CLR процедуру, отправляйте письма с её помощью.
25 июл 17, 16:52    [20674022]     Ответить | Цитировать Сообщить модератору
 Re: триггер, raiserror и msdb.dbo.sp_send_dbmail  [new]
Барсук-копатель
Member [заблокирован]

Откуда: Московский парк
Сообщений: 94886
NewIvanovec
CREATE TRIGGER [test].[test]
ON [test].[accounts] 
   AFTER UPDATE
AS
BEGIN
	DECLARE @id INT
	SET @id = 1
	
	
	IF (@id = 1)
	BEGIN
	    EXEC msdb.dbo.sp_send_dbmail @profile_name = 'email_from_it',
	         @recipients = 'test@testbank.ru',
	         @subject = 'test',
	         @body = 'test';
	    	    	    	    
	    RAISERROR('Ошибка в счёте_accounts', 11, -1)
	END
END


не отправляется письмо. если RAISERROR убрать, то письмо отправится. но RAISERROR нужен

если скуль 2016, то можно так
CREATE TRIGGER [test].[test]
ON [test].[accounts] 
   AFTER UPDATE
AS
BEGIN
	DECLARE @id INT
	SET @id = 1
	
	
	IF (@id = 1)
	begin
    begin try
      RAISERROR('Ошибка в счёте_accounts', 11, -1);
    end try
    begin catch
      if (@@trancount > 0)
      begin
        rollback;
      end;
      
	    EXEC msdb.dbo.sp_send_dbmail @profile_name = 'email_from_it',
	         @recipients = 'test@testbank.ru',
	         @subject = 'test',
	         @body = 'test';
      
      throw;
    end catch;
	END
END
27 июл 17, 15:34    [20680146]     Ответить | Цитировать Сообщить модератору
 Re: триггер, raiserror и msdb.dbo.sp_send_dbmail  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Барсук-копатель,
автор
если скуль 2016, то можно так

а из 2016 тут что?
27 июл 17, 15:50    [20680220]     Ответить | Цитировать Сообщить модератору
 Re: триггер, raiserror и msdb.dbo.sp_send_dbmail  [new]
Барсук-копатель
Member [заблокирован]

Откуда: Московский парк
Сообщений: 94886
TaPaK
Барсук-копатель,
автор
если скуль 2016, то можно так

а из 2016 тут что?
ошибься
вместо 2016 надо читать 2012
27 июл 17, 15:52    [20680231]     Ответить | Цитировать Сообщить модератору
 Re: триггер, raiserror и msdb.dbo.sp_send_dbmail  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Барсук-копатель,
автор
throw;

действительно нечем заменить
27 июл 17, 15:54    [20680242]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить