SQL server 表数据改变触发发送邮件的方法

今天遇到一个问题,原有生产系统正在健康运行,现需要监控一张数据表,当增加数据的时候,给管理员发送邮件。

领到这个需求后,有同事提供方案:写触发器触发外部应用程序。这是个大胆的想法啊,从来没写过这样的触发器。

以下是参考文章:

第一种方法: 触发器调用外部程序。 xp_cmdshell

http://www.jb51.net/article/90714.htm 第一篇提供的方法是需要开启xp_cmdshell

先开启xp_cmdshell

打开外围应用配置器—>

功能的外围应用配置器—>

实例名\Database Engine\xp_cmdshell—>

启用

然后可以调用外部程序:Exec xp_cmdshell 'c:\calc.exe' 。

第二种方法:将插入的值传给.bat 。同样使用调用外部程序的 xp_cmdshell 的权限

http://www.sqlparty.com/%E9%A2%98%E7%82%BC/2013/08/05/e5-a6-82-e4-bd-95-e5-9c-a8-e6-9f-90-e8-a1-a8-e6-96-b0-e6-8f-92-e5-85-a5-e6-95-b0-e6-8d-ae-e6-97-b6-e8-a7-a6-e5-8f-91-e6-89-a7-e8-a1-8c-e5-a4-96-e9-83-a8-e7-a8-8b-e5-ba-8f-ef-bc-9f.html

其实第二种方法可以归为第一种。

下面说说第三种方法:

SQL servere CLR

这种方法可以利用VS给sql server 写存储过程和触发器。打开了VS不愁写代码给管理员发email。

第四种方法:

SQL server Management -->Database Mail

开启Database Mail 之后,配制好发邮件的设置,直接写触发器就可以把插入的内容通过sql server 发送出来了。

Create TRIGGER tri_email
ON [dbo].[ImageGalleries]
AFTER insert
AS
BEGIN
if exists(select * from inserted)
begin
declare @content nvarchar(max)
select @content=i.Name+'|'+i.ImagePath from inserted i;
exec msdb.dbo.sp_send_dbmail @profile_name='SQLProfile',
@recipients=243594541@qq.com',
@subject='sql server send email by trigger',
@body=@content
end
END
GO 

这种方法是最直接最简便的方法。

(0)

相关推荐

  • SQL Server 使用触发器(trigger)发送电子邮件步骤详解

    sql 使用系统存储过程 sp_send_dbmail 发送电子邮件语法: sp_send_dbmail [ [ @profile_name = ] 'profile_name' ] [ , [ @recipients = ] 'recipients [ ; ...n ]' ] [ , [ @copy_recipients = ] 'copy_recipient [ ; ...n ]' ] [ , [ @blind_copy_recipients = ] 'blind_copy_recipien

  • 使用Python发送邮件附件以定时备份MySQL的教程

    最近迁移了wordpress,系统升级为CentOS 6,很奇怪的一个问题,在原来CentOS 5.8下用的很正常的定时备份数据库并通过邮件发送的脚本不能发送附件,其他都正常,邮件内容也是uuencode生成的文件编码,但是就是不产生附件.而且找不出原因,望有知道的不吝赐教. 为了解决这一问题,我用Python写了一个mail客户端,可以发送附件,是一个命令行程序.废话不多说.贴代码: #!/usr/bin/env python #-*- coding: utf8 -*- ''' #======

  • Python读取ini文件、操作mysql、发送邮件实例

    我是闲的没事干,2014过的太浮夸了,博客也没写几篇,哎~~~ 用这篇来记录即将逝去的2014 python对各种数据库的各种操作满大街都是,不过,我还是喜欢我这种风格的,涉及到其它操作,不过重点还是对数据库的操作.呵~~ Python操作Mysql 首先,我习惯将配置信息写到配置文件,这样修改时可以不用源代码,然后再写通用的函数供调用 新建一个配置文件,就命名为conf.ini,可以写各种配置信息,不过都指明节点(文件格式要求还是较严格的): 复制代码 代码如下: [app_info] DAT

  • sqlserver数据库使用存储过程和dbmail实现定时发送邮件

    上文已讲过如何在数据库中配置数据库邮件发送(备注: 数据库邮件功能是 基于SMTP实现的,首先在系统中 配置SMTP功能.即 在 "添加/删除程序"面板中 "增加/删除WINDOWS组件",选中并双击 打开"IIS"或 "应用程序",勾选 "SMTP SERVICE"然后 一路 点"下一步"即可.一般不需要这一步,直接配置即可) 本文给出一个使用实例,结合存储过程和Job来实现定时从数据

  • 通过sql存储过程发送邮件的方法

    SQL Server怎样配置发送电子邮件通常大家都知道:SQL Server与Microsoft Exchange Server集成性很好,关于这方面的配置,在SQL Server的联机帮助里有详细的说明,在此不再赘述.然而我们更关心的问题是:在没有Exchange Server的情况下,如何配置SQL Server利用Internet 邮件服务器发送邮件? 笔者曾为这问题伤透了脑筋,搜遍了互联网上的相关资料,发现仅有的几篇资料中有的是一笔带过,有的虽然介绍了操作步骤,可按照步骤一步一步操作下来

  • 使用sqlserver存储过程sp_send_dbmail发送邮件配置方法(图文)

    1) 创建配置文件和帐户 (创建一个配置文件和配置数据库邮件向导,用以访问配置数据库邮件管理节点中的数据库邮件节点及其上下文菜单中使用的帐户.) 打开数据库服务器 ------管理 -------数据库邮件------右键---配置数据库邮件(同时也可以看到管理已经配置好的邮件账户和配置文件) 这里的配置文件名,在使用sp_send_dbmail时会作为参数使用 点 "添加" 其中,账户名可以任意指定(描述功能即可),重点是邮件发送服务器(SMTP)的配置:电子邮件地址为发送方邮件地址

  • sqlserver2008自动发送邮件

    这两天都在搞这个东西,从开始的一点不懂,到现在自己可以独立的完成这个功能!在这个过程中,CSDN的好多牛人都给了我很大的帮助,在此表示十二分的感谢!写这篇文章,一是为了巩固一下,二嘛我也很希望我写的这点小东西能帮助遇到同样问题的朋友们!当然这里有一部分是从网上的摘录的实现一个类似于注册平台的功能:比如注册了一个用户,就会向注册邮箱里发送一封邮件.首先是要搭建一个自动发送邮件的平台,这个用sql server 2008(sql server 2005也有)的database mail就能很方便的实

  • SQL server 表数据改变触发发送邮件的方法

    今天遇到一个问题,原有生产系统正在健康运行,现需要监控一张数据表,当增加数据的时候,给管理员发送邮件. 领到这个需求后,有同事提供方案:写触发器触发外部应用程序.这是个大胆的想法啊,从来没写过这样的触发器. 以下是参考文章: 第一种方法: 触发器调用外部程序. xp_cmdshell http://www.jb51.net/article/90714.htm 第一篇提供的方法是需要开启xp_cmdshell 先开启xp_cmdshell 打开外围应用配置器-> 功能的外围应用配置器-> 实例名

  • SQL Server中数据行批量插入脚本的存储实现

    无意中看到朋友写的一篇文章"将表里的数据批量生成INSERT语句的存储过程的实现".我仔细看文中的两个存储代码,自我感觉两个都不太满意,都是生成的单行模式的插入,数据行稍微大些性能会受影响的.所在公司本来就存在第二个版本的类似实现,但是是基于多行模式的,还是需要手工添加UNAION ALL来满足多行模式的插入.看到这篇博文和基于公司数据行批量脚本的存储的缺点,这次改写和增强该存储的功能. 本存储运行于SQL Server 2005或以上版本,T-SQL代码如下: IF OBJECT_I

  • 实现SQL Server 原生数据从XML生成JSON数据的实例代码

    实现SQL Server 原生数据从XML生成JSON数据的实例代码 SQL Server 是关系数据库,查询结果通常都是数据集,但是在一些特殊需求下,我们需要XML数据,最近这些年,JSON作为WebAPI常用的交换数据格式,那么数据库如何生成JSON数据呢?今天就写了一个DEMO.        1.创建表及测试数据 SET NOCOUNT ON IF OBJECT_ID('STATS') IS NOT NULL DROP TABLE STATS IF OBJECT_ID('STATIONS

  • SQL Server表中添加新列并添加描述

    注: sql server 2005 及以上支持. 版本估计是不支持(工作环境2005,2008). 工作需要, 需要向SQL Server 现有表中添加新列并添加描述. 从而有个如下存储过程. (先附上存储过程然后解释) /********调用方法********** 作用: 添加列并添加列描述信息 调用: exec [SetColumnInfo] '表名', '列名', N'列说明,描述','列类型{默认:NVARCHAR(50)}','列默认值{默认:NULL}' ************

  • SQL Server表分区删除详情

    目录 一.引言 二.演示 2.1.数据查询 2.1.1. 查看分区元数据 2.1.2.统计每个分区的数据量 2.2.删除实操 2.2.1.合并原表分区 2.2.2.备份原表所有索引的创建脚本 2.2.3.删除原表所有索引 2.2.4.创建临时表 2.2.5.更改原表数据空间类型 2.2.6.移动原表分区数据到临时表 2.2.7.创建原表所有索引 到临时表 2.2.8.删除原表 2.2.9.删除分区方案和分区函数 2.2.10重命名表名 一.引言 删除分区又称为合并分区,简单地讲就是将多个分区的数

  • SQL Server表空间碎片化回收的实现

    目录 1 锁片化的产生 1.1 产生碎片化的原因 1.2 碎片化的影响 1.3 定位碎片化 2 碎片化处理 2.1 删除并重建聚集索引 2.2 DROP_EXISTING 2.3 DBCC DBREINDEX 2.4 DBCC INDEXDEFRAG 3 空间回收 参考链接: 1 锁片化的产生 1.1 产生碎片化的原因 1.在B-tree索引中,表数据按照聚集索引的排序进行物理存储,若聚集索引离散化比较严重,那么可能会出现较为严重的碎片化问题: 2.随着业务的DML操作,会伴随着数据页分裂的情况

  • SQL Server修改数据的几种语句详解

    目录 一:INSERT语句 二:INSERT INTO SELECT语句 三:UPDATE语句 四:DELETE语句 总结 本篇主要讲解的是SQL Server 中修改数据的几种语句: INSERT语句 INSERT INTO SELECT语句 UPDATE语句 DELETE语句 一:INSERT语句 INSERT语句向表中添加新行,以下是INSERT语句的最基本形式: 首先:table_name指定要插入的表的名称: 其次,column_list指定要在其中插入数据的一个或多个列的列表.必须将

  • SQL Server如何通过SQL语句直接操作另一台服务器上的SQL SERVER的数据

    SQL Server如何通过SQL语句直接操作另一个SQL SERVER的数据 1. 现在执行SQL语句的数据库服务器开启Ad Hoc Distributed Queries exec sp_configure 'showadvanced options',1 reconfigure exec sp_configure 'Ad HocDistributed Queries',1 reconfigure 2.通过openrowset(‘SQLOLEDB’,’另一个SQLSERVER数据库IP’;

  • 在SQL Server中将数据导出为XML和Json的方法

    有时候需要一次性将SQL Server中的数据导出给其他部门的也许进行关联或分析,这种需求对于SSIS来说当然是非常简单,但很多时候仅仅需要一次性导出这些数据而建立一个SSIS包就显得小题大做,而SQL Server的导入导出工具其中BUG还是蛮多的,最简单的办法是BCP. 数据导出为XML 在SQL Server 2005之后提供了一个for xml子句在关系数据库中原生支持XML.通过该命令可以将二维关系结果集转换为XML,通过BCP就可以将数据存为XML了. 例如下面的数据: 我们可以通过

  • SQL Server中将数据导出为XML和Json方法分享

    有时候需要一次性将SQL Server中的数据导出给其他部门的也许进行关联或分析,这种需求对于SSIS来说当然是非常简单,但很多时候仅仅需要一次性导出这些数据而建立一个SSIS包就显得小题大做,而SQL Server的导入导出工具其中BUG还是蛮多的,最简单的办法是BCP.  数据导出为XML 在SQL Server 2005之后提供了一个for xml子句在关系数据库中原生支持XML.通过该命令可以将二维关系结果集转换为XML,通过BCP就可以将数据存为XML了. 例如下面的数据: 我们可以通

随机推荐