【发布时间】:2014-12-14 12:45:57
【问题描述】:
我有一个结构如下的表
id | full_name | email
-------------------------------
1 | Ahmad | ahmad@some.com
2 | Jack | jack@another.com
3 | Mike | mike@yetanother.com
. . .. ..
等等。
我创建了以下触发器来向刚刚插入电子邮件的人发送电子邮件(作为欢迎消息):
create TRIGGER welcome_user ON users
AFTER INSERT
AS
begin
declare @email varchar(100)
declare @full_name varchar(200)
declare @html varchar(4000)
select @email=i.email,@full_name=i.full_name from inserted i
set @html = 'Dear ' + @full_name + '<br><br> Welcome...'
begin
exec msdb.dbo.sp_send_dbmail @profile_name = 'SQL Database Mail'
, @recipients = @email
, @copy_recipients = 'admin@mycompany.com'
, @from_address = 'admin@mycompany.com'
, @subject = 'Welcome'
, @body_format = 'HTML'
, @body = @html
end
end
GO
现在如果插入一行,上面的代码就可以工作了:
insert into users (id,full_name,email) values (900,'Jason','jason@email.com')
用户会收到一封邮件,我会被复制(因为我可以访问admin@mycompany.com)
但是当同时插入一堆行时会出现问题,执行如下操作:
insert into users (id,full_name,email)
select id,full_name,email from temp_users where validated='Y'
在上面的示例中,仅发送了一封电子邮件(插入的第一行)。其他的被插入到表中,但没有电子邮件发送给他们。一份副本都没有寄给我。
什么可能导致这种情况发生?
【问题讨论】:
标签: sql-server sql-server-2008 tsql email triggers