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

上文已讲过如何在数据库中配置数据库邮件发送(备注: 数据库邮件功能是 基于SMTP实现的,首先在系统中 配置SMTP功能。即 在 “添加/删除程序”面板中 “增加/删除WINDOWS组件”,选中并双击 打开"IIS"或 “应用程序”,勾选 "SMTP SERVICE"然后 一路 点“下一步”即可。一般不需要这一步,直接配置即可)

本文给出一个使用实例,结合存储过程和Job来实现定时从数据库发送邮件:
1、创建存储过程,在新建的存储过程中调用sp_send_dbmail存储过程(注:代码中的\'只是添加代码时自动添加的转义字符,实质代码中只有单引号)

代码如下:

Create PROCEDURE [dbo].[sp_send_error_alert]
AS
declare
@v_contentnvarchar(max),
@v_mail_tonvarchar(500),
@v_bodynvarchar(max),
@v_titilenvarchar(100)
,@v_br_idnvarchar(50)
,@v_installmentsnvarchar(10)
,@v_remarknvarchar(100)
BEGIN
SETNOCOUNTON;
set@v_titile=\'测试邮件内容标题;
set@v_content=\'\';

DECLAREcursor_repaymentCURSORFOR
SELECT
br_id
,installments
,remark
fromdw_account_repaymentt
where
status!=1
andis_del=0
orderbyt.add_datetimedesc;

OPENcursor_repayment
FETCHNEXTFROMcursor_repaymentINTO
@v_br_id--标ID
,@v_installments--期数
,@v_remark--错误描述
WHILE@@FETCH_STATUS=0
BEGIN

set@v_content=@v_content+\'<tr><td>\'+@v_br_id+\'</td>\'+\'<td>\'+@v_installments+\'</td>\'+\'<td>\'+@v_remark+\'</td></tr>\';

fetchnextfromcursor_repaymentinto
@v_br_id--标ID
,@v_installments--期数
,@v_remark--错误描述
end;

CLOSEcursor_repayment;--关闭游标
DEALLOCATEcursor_repayment;--清空游标

ifLEN(@v_content)>0
begin
SET@v_body=\'<html><H1>自动还款所有异常列表</H1><bodybgcolor=white><tableborder=1><tr><th>标ID</th><th>期数</th><th>错误描述</th></tr>\'
SET@v_body=@v_body+@v_content+\'</table></body></html>\'
EXECmsdb.dbo.sp_send_dbmail
@recipients=N\'接收用户地址1@qq.com;接收用户地址2@qq.com\',@body=@v_body,@body_format=\'HTML\'
,@subject=@v_titile,@profile_name=\'上一节点的配置文件名(db_profiler)\

创建Job(SqlServer代理->作业),设置执行参数,定时执行此存储过程,即可实现定时发送邮件效果。

(0)

相关推荐

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

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

  • 批量修改所有服务器的dbmail配置(推荐)

    最近遇到这样一个案例,需要修改所有SQL Server的Database Mail的SMTP,原来的SMTP为10.xxx.xxx.xxx, 现在需要修改为192.168.xxx.xxx, 另外需要规范邮件地址,以前这类邮件ServerName@yoursqldba.com的后缀需要修改为ServerName@xxxx.com(信息做了脱敏处理). 如果使用SSMS客户端的UI界面去修改的话, 那么多服务器一台一台去修改,不仅费时费力,而且枯燥无聊.只能使用脚本,一旦写好一个脚本,而后使用Mul

  • python实现linux服务器批量修改密码并生成execl

    批量修改linux服务器密码,同时生成execl表格 复制代码 代码如下: #!/usr/bin/env python#coding:utf8#随机生成自定义长度密码from random import choiceimport string,pickle def GenPassword(length=8,chars=string.ascii_letters+string.digits):    return ''.join([choice(chars) for i in range(lengt

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

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

  • SQLserver 数据库危险存储过程删除与恢复方法

    今天为了实现SQLServer/" target="_blank">sqlserver的复制功能,因为以前删除了很多的sqlserver的一些会导致不安全因素的扩展,导致很多功能无法用,没有办法需要重新的恢复扩展. 曾经遇过,差点抓狂,有装MSSQL的朋友,赶紧试一下,删除以下的组件.当然,前提是你要把自己的数据库搞定后再去删除,否则组件删除后很多功能不能用,为了安全,就得牺牲某些功能,当然,像我这类的,我除了把MSSQL导入后,基本上一年用不到两次,所以,我是会毫不犹

  • C# Ado.net实现读取SQLServer数据库存储过程列表及参数信息示例

    本文实例讲述了C# Ado.net读取SQLServer数据库存储过程列表及参数信息的方法.分享给大家供大家参考,具体如下: 得到数据库存储过程列表: select * from dbo.sysobjects where OBJECTPROPERTY(id, N'IsProcedure') = 1 order by name 得到某个存储过程的参数信息:(SQL方法) select * from syscolumns where ID in (SELECT id FROM sysobjects

  • SQLServer数据库从高版本降级到低版本实例详解

    SQLServer数据库从高版本降级到低版本实例详解 由于目前还广泛使用着SQLServer2000,很多公司又想使用新的SQLServer,从而直接[分离/附加]或者[备份/还原]数据库,在不同版本之间存放.往往就会遇到版本不兼容的问题.前几天遇到了从我本机2008R2上备份的一个数据库还原到2008上面时报错: 从运行版本10.50.2500(2008R2是10.50)和10.00.1600(2008是10.00)中可以看出这个版本不兼容问题,大部分情况下,从低版本升级到高版本,只要不是跨度

  • 日常收集整理SqlServer数据库优化经验和注意事项

    网上关于SQL优化的教程很多,但是比较杂乱.近日有空整理了一下,写出来跟大家分享一下,其中有错误和不足的地方,还请大家纠正补充. 优化数据库的注意事项: 1.关键字段建立索引. 2.使用存储过程,它使SQL变得更加灵活和高效. 3.备份数据库和清除垃圾数据. 4.SQL语句语法的优化.(可以用Sybase的SQL Expert,可惜我没找到unexpired的序列号) 5.清理删除日志. SQL语句优化的基本原则: 1.使用索引来更快地遍历表. 缺省情况下建立的索引是非群集索引,但有时它并不是最

  • SQLServer数据库中开启CDC导致事务日志空间被占满的原因

    SQLServer中开启CDC之后,在某些情况下会导致事务日志空间被占满的现象为: 在执行增删改语句(产生事务日志)的过程中提示,The transaction log for database '***' is full due to 'REPLICATION'(数据库"***"的事务日志已满,原因为"REPLICATION"). CDC以及复制的基本原理粗略地讲,对于日志的使用步骤如下: 1,每当基础表(开启了CDC或者replication的表)产生事务性操作

  • 复制SqlServer数据库的方法

    在目前的工作中需要解决复制整个SqlServer数据库的问题,复制的内容包括数据库大纲.数据库中的存储过程.函数.表结构.主外键关系以及表中的所有数据等,也就是说copy版本与原数据库一模一样.经过一段时间的摸索,找到的一个比较简单的解决方案是: (1)在复制数据库之前,先备份该数据库到文件. (2)依据备份文件创建新的数据库,并Restore即可.    备份数据库可用如下Sql语句:  复制代码 代码如下: string.Format("backup database {0} to disk

  • 图书管理系统的sqlserver数据库设计示例

    首先,在写数据库时需要遵循以下几个原则:     数据库的命名规范: 方便代码的交流和维护              不影响代码的效率,不与大众习惯冲突              使代码更美观,阅读更方便              使代码的逻辑更清晰,更易于理解 术语的定义: Pascal方法:将标识符的首字母和后面连接的每个单词的首字母都大写  ,可以对三字母或更多的字符的标识符使用.例如:BackColor              Camel方法:标识符的首字母小写,而后面连接的单词首字母

  • Linux安装ODBC连接SQLServer数据库的步骤

    目录 1.下载ODBC安装包 2.安装步骤 第一步:上传两个安装包到服务器上 第二步:安装unixODBC,先安装这个,后安装freetds 2.1.操作系统先安装gcc: 2.2.安装odbc 2.3.安装freetds 2.4.配置freetds驱动 2.5.测试配置是否正确 2.6.配置unixODBC 2.7.测试是否能连接数据库 2.8.shell脚本连接数据库 2.9.安装了SQLServer的机器上调用命令执行存储过程 操作系统:Centos7.2 1.下载ODBC安装包 unix

  • VB语言使用ADO连接、操作SQLServer数据库教程

    几年前学过的VB几乎忘光了,这几天复习了下.VB连接ADO数据库并不是非常难. 连接第一步(要仔细看) 对于小白来讲,这里的教程最详细,连接ADO数据库第一步,要添加什么部件呢?全称是Microsoft ADO Data Control 6.0 (SP6) (OLEDB) 部件. 在Microsoft ADO Data Control 6.0 (SP6) (OLEDB)部件里有一个名叫:Adodc数据控件,要将它添加.在Adodc数据控件数据位置中找到ACCES. 控件引用的方法(值指的是姓名)

随机推荐