【发布时间】:2021-01-11 04:20:24
【问题描述】:
SQL Server 2017 对表的触发器 我有以下触发器正在运行,它可以工作。但是,我想根据更新的特定字段发送不同的电子邮件部分。我基本上想使用 SQL Server 发送邮件代码发送给不同用户的不同字段。我想知道是否有某种方法可以结合声明?我希望我问的是正确的!我的 SQL 就像 AT&T 的商业广告一样......就好了!因此,如果您可以提供帮助,请提供代码,如果这实际上可以完成。例如:
如果名字已更新,请发送/执行此操作:
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'Echo System',
@recipients = 'sample1.com',
@subject = 'Send email for sample1',
@body = 'Please start a background check'
如果姓氏已更新,请发送/执行此操作
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'Echo System',
@recipients = 'sample2.com',
@subject = 'Send email for sample2',
@body = 'Please start a background check'
发送/这样做是更新国籍。
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'Echo System',
@recipients = 'sample3.com',
@subject = 'Send email for sample3',
@body = 'Please start a background check'
ALTER trigger [dbo].[updatePerson] on
[dbo].[person]
for update
as
declare @personId int;
declare @firstname varchar(50);
declare @lastname varchar(50);
declare @nationality varchar(100);
declare @activity varchar(100);
select @personId = s.personId from inserted s;
select @firstname = s.firstname from inserted s;
select @lastname = s.lastname from inserted s;
select @nationality = s.nationality from inserted s;
if update(firstname)
set @activity = 'Updated person firstname'
if update(lastname)
set @activity = 'Updated person lastname'
if update(nationality)
set @activity = 'Updated person nationality'
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'Echo System',
@recipients = 'sampletriggernamen@gmail.com',
@subject = ' follow the sampleaction you need to take. http://test.aspx',
@body = 'Please start a background check'
【问题讨论】:
-
从
TRIGGER发送电子邮件通常是个坏主意。例如,如果电子邮件发送失败,那么事务也会失败,因此不会更新行。然而,上面的TRIGGER有更致命的缺陷;它假设 DML 操作只影响 1 行。 DML 语句会影响一行或多行,如果有更多行,上述语句将无法正常工作。理想地修复缺陷,然后将数据放入池表中;然后从那里发送电子邮件。更好的是,从应用层发送邮件;这才是这个逻辑应该存在的地方。 -
此外,连接到 SMTP 服务器可能会涉及各种延迟和超时,这会减慢速度。
-
您也从 "SQL Server 2017 Trigger on Table" 开始,但您的标签显示为 sql-server-2016。您实际使用的是哪个?
-
@Larnu, sql SERVER 2017。对不起那种类型。
-
连接到 SQL Server 没有延迟。它实际上非常有效,没有任何延迟,但我需要向不同的用户发送通知,因为不同的用户拥有不同字段的更新。实际上,我通过搜索查看了其他一些系统,它们正在做非常相似的事情。
标签: .net sql-server tsql triggers sql-server-2017