SQL Server发送电子邮件通知插入表中的数据 - 选项?

时间:2012-03-21 22:30:06

标签: sql-server tsql stored-procedures clrstoredprocedure database-mail

我有一个SQL Server数据库,它在几个ASP.NET(VB.NET)网站之间共享,数据库有一个存储客户查询的表 - 我希望提供电子邮件通知,通知组织内部人员的新查询(并可能将一些查询数据放入电子邮件正文中)。请问有人可以根据如何实施这些方案来概述我的选择吗?

我的想法是:

  1. 的SQLMail
  2. 数据库邮件
  3. 使用System.Net.Mail库的VB.NET存储过程?
  4. 其他选择?
  5. 选项3似乎是可取的,因为我知道如何在VB.NET中执行此操作并且它是微不足道的。

    • 我的其他选择是什么?
    • 有什么警告?
    • 我可以实时执行此操作,即触发器(插入量很低)吗?
    • 或者批量完成这项工作是否至关重要?

    任何帮助都非常欢迎! 感谢。

2 个答案:

答案 0 :(得分:5)

1),2)和3)之间唯一值得考虑的是2)。 1)是一个死产,使用一个被弃用的功能因其问题和问题而臭名昭着。 3)是一个坏主意,因为它打破了事务一致性(即使插入回滚,也发送了的SMTP邮件),并且因为调用者(可能是你正在呈现的网页)必须等待,这是一种性能损失直到SMTP交换完成(即同步)。只有2)提供事务一致性并且是异步的(在SMTP完成之前不会阻止调用者)。

通常,此类任务可以更好地委派给Reporting Services任务。您可以使用Data-Driven subscription创建email delivery。这是开箱即用的,无需重新发明轮子。

答案 1 :(得分:1)

我已经处理过与此类似的情况,我采用的解决方案是让C#windows服务每分钟检查一次SQL服务器作业队列。此作业队列将包括发送电子邮件等作业。然后,您可以在桌面上使用TRIGGER插入一个新的“电子邮件警报”作业,该作业将在下一个周期中被接收。