Jam*_*uma 20 email triggers sql-server-2008-r2
我正在尝试开发邮件触发器.有人可以协助如何实现这一点,以便当用户插入记录时,它会检查"速度"字段,以便当插入的值超过100时,将邮件发送到指定的地址.
Aar*_*and 51
首先,您需要设置数据库邮件 - 如果您还没有这样做,这个问题可能会有所帮助:
然后你需要一个触发器:
CREATE TRIGGER dbo.whatever
ON dbo.wherever
FOR INSERT
AS
BEGIN
SET NOCOUNT ON;
IF EXISTS (SELECT 1 FROM inserted WHERE speed > 100)
BEGIN
EXEC msdb.dbo.sp_send_dbmail
@recipients = 'whoever@yourcompany.com',
@profile_name = 'default',
@subject = 'Someone was speeding',
@body = 'Yep, they sure were.';
END
END
GO
Run Code Online (Sandbox Code Playgroud)
现在,您可能会说您希望插件中的数据实际包含在电子邮件中.你的第一个倾向是声明一些局部变量并从中分配它们inserted- 这不起作用,因为你的触发器可以响应多行插入.所以正确的方法是:
CREATE TRIGGER dbo.whatever
ON dbo.wherever
FOR INSERT
AS
BEGIN
SET NOCOUNT ON;
DECLARE @body NVARCHAR(MAX) = N'';
SELECT @body += CHAR(13) + CHAR(10) + RTRIM(some_col) FROM inserted;
IF EXISTS (SELECT 1 FROM inserted WHERE speed > 100)
BEGIN
EXEC msdb.dbo.sp_send_dbmail
@recipients = 'whoever@yourcompany.com',
@profile_name = 'default',
@subject = 'At least one person was speeding',
@body = @body;
END
END
GO
Run Code Online (Sandbox Code Playgroud)
总而言之,我不是从触发器发送电子邮件的忠实粉丝.即使数据库邮件使用服务代理也是异步的,我更倾向于填充队列表,并且有一个后台线程,并发送所有相应的电子邮件.关于这两件事的两件好事是:
sp_send_dbmail-这是我无意中建议-防止插入).| 归档时间: |
|
| 查看次数: |
77233 次 |
| 最近记录: |