2015-04-13 3 views
0

SQL Server 2012 Я получаю несколько писем, когда этот триггер срабатывает при вставке записи. Если получить только один адрес электронной почты вот код:Остановить получение нескольких писем от триггера

ALTER TRIGGER [dbo].[WOInsertMail] ON [dbo].[WORKORDR] 

FOR Update 
AS 

DECLARE @Emails NVARCHAR(MAX) 
DECLARE @WRKOxml NVARCHAR(MAX) 
DECLARE @WRKOrdBody NVARCHAR(MAX) 
DECLARE @sub NVARCHAR(MAX) 

SET @WRKOxml = CAST(( 
SELECT convert(varchar(10),ID) AS 'td','', 
convert(varchar(20),isnull(Workordno,'')) AS 'td','', 
convert(varchar(20),isnull(WODate,'')) AS 'td','', 
convert(varchar(20),isnull(WOTitle,'')) AS 'td','', 
convert(varchar(20),isnull(engineer,'')) AS 'td','', 
convert(varchar(20),isnull(drafter,'')) AS 'td','', 
convert(varchar(20),isnull(insertuser,'')) AS 'td','', 
convert(varchar(20),isnull(insertdate,'')) AS 'td' 

FROM inserted 
FOR XML PATH('tr'), ELEMENTS) AS NVARCHAR(MAX)) 
SET @WRKOrdBody ='<H3>Work Order Insert</H3> 
<table border = 1> 
<tr> 
<th>ID</th><th>Workordno</th> 
<th>WODate</th><th>WOTitle</th> 
<th>Engineer</th><th>Drafter</th> 
<th>InsertUser</th><th>InsertDate</th> 
</tr>'  
SET @WRKOrdBody = @WRKOrdBody + isnull(@WRKOxml,'') +'</table>' 

set @Emails = '<html><body>' + isnull(@WRKOrdBody,'') + '</body></html>' 

select @sub = 'WorkOrder #' + convert(varchar(10),ID) + ' has been inserted   in WO Table on ' + convert(varchar(10),WODATE) 
FROM inserted 

EXEC msdb.dbo.sp_send_dbmail 

@recipients = '[email protected]', 
@subject = @sub, 
@body = @Emails, 
@body_format ='HTML' 
+0

Это похоже на триггер UPDATE. У вас есть еще один выстрел в INSERT? –

+0

Нет. Хотелось бы, чтобы у него был огонь по вставке, но электронные письма приходили ко мне пустым –

+0

Итак, код выше говорит «ЗАРОЖИТЬ». Вы говорите, что ваш фактический триггер говорит «FOR Insert», и что, когда вы вставляете запись, вы получаете несколько пустых писем? –

ответ

0

Я напуган, что триггер вызывается для каждой вставленной строки separatelly (вероятно, из какого-нибудь .net приложение) - в противном случае линия

select @sub = 'WorkOrder #' + convert(varchar(10),ID) + ' has been inserted   in WO Table on ' + convert(varchar(10),WODATE) 
FROM inserted 

будет терпеть неудачу из-за попытки вставить значения из 2+ строк в скалярную переменную.

Попробуйте вставить 2 или более строк в один запрос на вставку из SSMS.

+0

Перевернулся на работу под SQL Agent .... слишком большая боль как триггер –

Смежные вопросы