本文转自:http://blog.netnerds.net/2008/02/create-a-basic-sql-server-2005-trigger-to-send-e-mail-alerts/

For as many times as I have read about sending e-mails using SQL Server triggers, I've rarely come across actual code samples. After someone asked for a "Triggers for Dummies" example in a Facebook SQL group, I created the following example which uses a trigger to alert a manager that an expensive item has been entered into inventory.

First, if SQL Mail isn't enabled and a profile hasn't been created, we must do so.

--// First, enable SQL SMail
use master
go
 
sp_configure 'show advanced options',1
go
 
reconfigure with override
go
 
sp_configure 'Database Mail XPs',1
go
 
reconfigure
go
--//Now create the mail profile.
--//CHANGE @email_address,@display_name and @mailserver_name VALUES to support your environment
EXECUTE msdb.dbo.sysmail_add_account_sp
@account_name = 'DBMailAccount',
@email_address = 'sqlserver@domain.com',
@display_name = 'SQL Server Mailer',
@mailserver_name = 'exchangeServer'

EXECUTE msdb.dbo.sysmail_add_profile_sp
@profile_name = 'DBMailProfile'

EXECUTE msdb.dbo.sysmail_add_profileaccount_sp
@profile_name = 'DBMailProfile',
@account_name = 'DBMailAccount',
@sequence_number = 1 ;
 

Now that SQL will support sending e-mails, let's create the sample table.

This is not a useful or well designed table by any means -- it's just a simple example table:

CREATE TABLE dbo.inventory (
item varchar(50), price money
)
GO

Now that SQL mail and the table are setup, we will create a trigger that does the following:

  • Creates an AFTER INSERT trigger named expensiveInventoryMailer on the inventory table.

This means that the trigger will be executed after the data has been entered.

  • Checks for items being entered that have a price of $1000 or more
  • If there is a match, an email is sent using the SQL Mail profile we used above.
CREATE TRIGGER expensiveInventoryMailer
ON dbo.inventory AFTER INSERT
AS
DECLARE @price money
DECLARE @item varchar(50)

SET @price  = (SELECT price FROM inserted)
SET @item = (SELECT item FROM inserted)

IF @price >= 1000
  BEGIN
    DECLARE @msg varchar(500)
    SET @msg = 'Expensive item "' + @item + '" entered into inventory at $' + CAST(@price as varchar(10)) + '.'
    --// CHANGE THE VALUE FOR @recipients
    EXEC msdb.dbo.sp_send_dbmail
        @recipients=N'manager@domain.com',
        @body= @msg, 
        @subject = 'SQL Server Trigger Mail',
        @profile_name = 'DBMailProfile'
   END
GO

The only way to test a trigger is to add actual data, so let's do that here:

insert into inventory (item,price) values ('Vase',100)

insert into inventory (item,price) values ('Oven',1000)

Your email should arrive very quickly.

If it doesn't, check the SQL Server mail log in SQL Management Studio by running SELECT * FROM sysmail_allitems.

Have fun!

另:

Database Mail and SQL Mail Stored Procedures (Transact-SQL)

http://msdn.microsoft.com/en-us/library/ms177580(v=sql.90).aspx

[转]create a basic sql server 2005 trigger to send email alerts的更多相关文章

  1. SQL Server 2005 中实现通用的异步触发器架构

    在SQL Server 2005中,通过新增的Service Broker可以实现异步触发器的处理功能.本文提供一种使用Service Broker实现的通用异步触发器方法. 在本方法中,通过Serv ...

  2. 解密SQL SERVER 2005加密存储过程,函数

    在SQL SERVER 2005中必须用专用管理连接才可以查看过程过程中用到的表 EG:sqlcmd -A 1>use test 2>go 1>sp_decrypt 'p_testa ...

  3. SQL Server 2005入门到精通(案例详解)

    SQL Server 2005基础应用   一.数据库的基本操作 --创建数据库 create database new_db2 on primary ( name='new.mdf', filena ...

  4. 记一次sql server 2005访问http接口,并解析json的过程

    记一次sql server 2005访问http接口,并解析json的过程  JSON解析官方网站:https://www.red-gate.com/simple-talk/sql/t-sql-pro ...

  5. SQL Server 2005 中实现通用的异步触发器架构 (转)

    在SQL Server 2005中,通过新增的Service Broker可以实现异步触发器的处理功能.本文提供一种使用Service Broker实现的通用异步触发器方法. 在本方法中,通过Serv ...

  6. 深入理解SQL Server 2005 中的 COLUMNS_UPDATED函数

    原文:深入理解SQL Server 2005 中的 COLUMNS_UPDATED函数 概述 COLUMNS_UPDATED函数能够出现在INSERT或UPDATE触发器中AS关键字后的任何位置,用来 ...

  7. SQL SERVER 2005删除维护作业报错:The DELETE statement conflicted with the REFERENCE constraint "FK_subplan_job_id"

    案例环境: 数据库版本: Microsoft SQL Server 2005 (Microsoft SQL Server 2005 - 9.00.5000.00 (X64) ) 案例介绍: 对一个数据 ...

  8. SQL SERVER 2005/2008 中关于架构的理解(二)

    本文上接SQL SERVER 2005/2008 中关于架构的理解(一)      架构的作用与示例 用户与架构(schema)分开,让数据库内各对象不再绑在某个用户账号上,可以解决SQL SERVE ...

  9. sql server 2005导出数据到oracle

    一. 在sql server下处理需要导出的数据库 1. 执行以下sql,查出所有'float'类型的字段名,手动将float类型改为decimal(18,4). select 表名=d.name,字 ...

随机推荐

  1. hive-group by的时候把两个字段变成map

    源表结构: pcgid               string mobilegid           string value               double 测试数据如下: p1 m1 ...

  2. MapReduce框架组成

    原文地址:MapReduce的架构组成 MapReduce基本架构 分而治之,并行计算 一句话 -- 整体主从架构,map加reduce:map.split入磁盘,数据对分partition:shuf ...

  3. 0,null,undefined,[],{},'',false之间的关系

    0与一些虚值的比较: 0与false 0==false true 0与'': =='' true 0与[]: ==[] true 0与NaN: 0==NaN false 0与undefined 0== ...

  4. Sqrt(x)——二分法,防越界

    Implement int sqrt(int x). Compute and return the square root of x. 转自:http://blog.csdn.net/doc_sgl/ ...

  5. 对于mysql加索引,删除索引,添加列,删除列,修改列顺序的最佳办法测试

    1.首先进行数据训的XltraBackup备份,有备无患,切记切记! 2.mysql -uroot -pD******** -- 导出csv文件 use dsideal_db; MariaDB [ds ...

  6. 关于微信获取access_token接口,返回值为-1000的问题

    今天打算获取token来,来修改公众号的菜单,结果像往常一样输入了appid 和 secret ,结果没有返回access_token,而是返回了一个-1000,并提示 "未知返回状态&qu ...

  7. WordPress匿名投稿插件:DX-Contribute(WP我要投稿,我要爆料)

    倡萌在<WordPress添加投稿功能(无需注册/可邮件通知站长和投稿人) >中分享过,通过修改主题文件实现游客快捷投稿的功能,但是有部分同学就是不太会动手,那么今天就分享一个WordPr ...

  8. 我感觉prometheus这种日志收集模式不错

    思想可以,可推可拉,可自己写接入点...还有报警... 按官方文档试一下安装 https://prometheus.io/docs/introduction/getting_started/

  9. jquery实现页面加载时删除特定class 的div内前三个字符

    jQuery(document).ready(function(){        jQuery("div.groupheader").each(function(){ $(thi ...

  10. Apache配置基于IP的虚拟主机 Apache virtual host configuration is based on the IP

    Step 1: 检查是否开启 httpd-vhosts.conf apache/conf/httpd.conf文件 # Virtual hosts Include conf/extra/httpd-v ...