了解表中更新的简单方法

时间:2009-09-02 20:54:21

标签: sql-server

嗨,只是想知道有没有办法知道是否有任何更新发生在Ex:Author ID这样的列中,一旦它的更新发生在列中,有任何简单的方法,以便所有管理者都应该知道新的作者更新发生在数据库或通过电子邮件,我是一个新手,如果有人一步一步帮助我这对我来说真的很棒在申请时请帮助...

由于 aaru

4 个答案:

答案 0 :(得分:2)

您需要创建一个触发器

CREATE TRIGGER reminder2
ON Sales.Customer
AFTER INSERT, UPDATE, DELETE 
AS
   EXEC msdb.dbo.sp_send_dbmail
        @profile_name = 'AdventureWorks Administrator',
        @recipients = 'danw@Adventure-Works.com',
        @body = 'Don''t forget to print a report for the sales force.',
        @subject = 'Reminder';

但是,在存储过程中使用sp_send_dbmail是不合适的,因为它会减慢行的更新速度。这意味着每次对该行进行更新时,都必须等到发送电子邮件。

相反,您应该使用另一个表来存储行上的操作,让批处理作业或服务扫描表并发送电子邮件本身。

例如:

CREATE TRIGGER SendEmailOnUpdate
    ON Author
    AFTER UPDATE
    AS
       INSERT INTO Notification(AuthorId) VALUES(updated.AuthorId);

创建一个扫描表Notification的Windows服务,一次取一行,并根据它包含的数据发送电子邮件。

有关触发器的详情,请参阅MSDN

答案 1 :(得分:1)

您可能希望使用Sql Trigger来创建某些表和字段上发生的所有更新的日志。

答案 2 :(得分:0)

您可能希望在触发器中使用UPDATE()函数(在线书籍中查找)来测试您感兴趣的字段的更改(即作者)

答案 3 :(得分:0)

实际上,在触发器中使用sp_send_dbmail并不是那么糟糕。与MAPI xp_sendmail日不同,sp_send_dbmail只是将电子邮件排队(实质上是将记录写入表中)。它不会导致触发器等待发送电子邮件。虽然SQL BOL说sp“发送电子邮件”,但成功调用的结果是“邮件排队”消息。

我仍然不确定会从触发器中调用它,但我现在考虑使用dbmail。