停止从触发器获取多封电子邮件

时间:2015-04-13 18:12:38

标签: sql triggers sql-server-2012

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 = 'My@email.com',
@subject = @sub,
@body = @Emails,
@body_format ='HTML'

1 个答案:

答案 0 :(得分:0)

我担心会为每个插入的行单独调用触发器(可能来自某个.net应用程序) - 否则行

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

会因为尝试将2+行的值插入标量变量而失败。

请尝试在SSMS的一个插入查询中插入2行或更多行。