`
yin_jw
  • 浏览: 49119 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

sqlserver2000利用存储过程发邮件(转)

阅读更多

 

 

最近在一个做企业的一个内部系统,数据库采用的是SQL2000,为了保证数据的安全性,需要每天下班之后做数据备份,并且通过邮件的方式通知管理 员备份情况。备份数据库很简单,用SQL代理建立一个作业,每天定时备份数据库即可,通过SQL2000来发邮件的话,在网上找了些资料,发现有多种方式 可以采用。
一、通过SQL Mail
    SQL Mail 提供了一种从 Microsoft SQL Server 发送和阅读电子邮件的简单方法。原理是通过调用服务器上面的 MAPI 子系统来进行邮件发送,所以服务器上面需要安装诸如 Microsoft Outlook(不能是Outlook ExPRess) 之类的 MAPI 客户端,而且在发送邮件的时候,Outlook必须处于打开的状态。具体的设置方法可以通过网上查询。
二、使用CDONTS
    通过调用本机的SMTP服务来发送邮件,所以服务器上必须安装IIS和SMTP。相应的存储过程为

    CREATE PROCEDURE [dbo].[sp_send_cdontsmail]
@From varchar(100),
@To varchar(100),
@Subject varchar(100),
@Body varchar(4000),
@CC varchar(100) = null,
@BCC varchar(100) = null
AS
Declare @MailID int
Declare @hr int
EXEC @hr = sp_OACreate 'CDONTS.NewMail', @MailID OUT
EXEC @hr = sp_OASetProperty @MailID, 'From',@From
EXEC @hr = sp_OASetProperty @MailID, 'Body', @Body
EXEC @hr = sp_OASetProperty @MailID, 'BCC',@BCC
EXEC @hr = sp_OASetProperty @MailID, 'CC', @CC
EXEC @hr = sp_OASetProperty @MailID, 'Subject', @Subject
EXEC @hr = sp_OASetProperty @MailID, 'To', @To
EXEC @hr = sp_OAMethod @MailID, 'Send', NULL
EXEC @hr = sp_OADestroy @MailID

调用方法:
exec sp_send_cdontsmail 'someone@shouji138.com','someone2@hks8.com','测试邮件标题','这里是邮件内容,推荐一个好的小说站, 好看书吧,http://www.hks8.com'


三、使用CDOSYS
    微软已经在 Windows 2000、Windows xp 以及 Windows 2003 中淘汰了 CDONTS,所以使用CDOSYS是目前最好的解决方案。使用CDOSYS可以使用远程的SMTP服务器来发送邮件,我们通过测试163网易的免费邮 箱,可以正常发送邮件,相应的存储过程如下:
    CREATE PROCEDURE sys_sendmail  @To varchar(100) , @Bcc varchar(500), @Subject varchar(400)=" ",
 @Body varchar(4000) =" "

AS

Declare @smtpserver varchar(50)   --SMTP服务器地址
Declare @smtpusername varchar(50) --SMTP服务器用户名
Declare @smtpuserpassWord varchar(50) --SMTP服务器密码
set @smtpserver = 'smtp.163.com'
set @smtpusername = 'yourname@163.com'  --这里设置成你的163邮箱用户名
set @smtpuserpassword = 'password'  --这里设置成你的163邮箱密码
Declare @object int
Declare @hr int

EXEC @hr = sp_OACreate 'CDO.Message', @object OUT

EXEC @hr = sp_OASetProperty @object, 'Configuration.fields("http://schemas.microsoft.com/cdo/configuration/sendusing").Value','2'
EXEC @hr = sp_OASetProperty @object, 'Configuration.fields("http://schemas.microsoft.com/cdo/configuration/smtpserver").Value', @smtpserver

--下面三条语句是smtp验证,如果服务器需要验证,则必须要这三句,你需要修改用户名和密码
EXEC @hr = sp_OASetProperty @object, 'Configuration.fields("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate").Value','1'
EXEC @hr = sp_OASetProperty @object, 'Configuration.fields("http://schemas.microsoft.com/cdo/configuration/sendusername").Value',@smtpusername
EXEC @hr = sp_OASetProperty @object, 'Configuration.fields("http://schemas.microsoft.com/cdo/configuration/sendpassword").Value',@smtpuserpassword

EXEC @hr = sp_OAMethod @object, 'Configuration.Fields.Update', null
EXEC @hr = sp_OASetProperty @object, 'To', @To
EXEC @hr = sp_OASetProperty @object, 'Bcc', @Bcc
EXEC @hr = sp_OASetProperty @object, 'From', @smtpusername
EXEC @hr = sp_OASetProperty @object, 'Subject', @Subject

EXEC @hr = sp_OASetProperty @object, 'TextBody', @Body
EXEC @hr = sp_OAMethod @object, 'Send', NULL

--判断出错
IF @hr <> 0
BEGIN
  EXEC sp_OAGetErrorInfo @object
  print 'failed'
  return @object
END
PRINT 'success'
EXEC @hr = sp_OADestroy @object
GO

调用存储过程发送邮件:exec sys_sendmail 'someone@shouji138.com','someone2@hks8.com','测试邮件标题','这里是邮件内容,手机主 题,http://www.shouji138.com'


从以上三种方法的优缺点比较来看,我们当然采取第三种方法,不需要在服务器上装别的组件和程序。我们可以在SQL代理中建立一个作业,调度 设为每天下午6点,执行的数据库备份语句和发送邮件的SQL如下:

declare @dbname varchar(50)
set @dbname = 'dbtest' --设置数据库名
declare @filename nvarchar(100)
declare @time datetime
set @time = getdate()
set @filename= 'D:\数据库自动备份\'+@dbname+substring(replace(replace(replace(CONVERT(varchar, @time, 120 ),'-',''),' ',''),':',''),1,14 )+'.bak'
--print @filename
BACKUP DATABASE dbtest  TO DISK = @filename WITH NOINIT, NOUNLOAD, NAME = N'BIS_data_backup', NOSKip , STATS = 10, NOFORMAT

--下面获取备份之后文件的大小
declare @size int
declare @sizeM decimal (5, 2)

select   top   1   @size=backup_size  
from   msdb.dbo.backupset  
where   database_name   =   @dbname  
order   by   backup_start_date   desc
 
set @sizeM = CAST(@size as float)/1024/1024
--print @sizeM
--邮件内容
declare @content varchar(2000)
set @content='数据库自动备份成功。
数据库名:'+@dbname+'
备份文件 名:'+@filename+'
备份文件大小:'+convert(varchar,@sizeM)+'M
备份时 间:'+CONVERT(varchar, @time, 120 )+'
这是一封系统自动发出的邮件,用来每天报告数据库自动备份情况,请不要 直接回复。'
--print @content
--发送邮件
EXECUTE dbtest.dbo.sys_sendmail 'dba@hks8.com','dba@shouji138.com',
'数据库自动备份日报',@content
go

分享到:
评论

相关推荐

    使用SQL存储过程发送邮件

    本篇文章将详细介绍如何利用SQL Server中的存储过程实现发送邮件的功能,这对于需要进行自动化通知、提醒等应用场景具有重要的意义。 #### 1. 存储过程简介 存储过程是SQL Server中一种重要的编程对象,它是由一...

    SQL Server 2000试题汇编

    1. 数据库概念:理解数据库的基本概念,如表、视图、索引、存储过程等,以及它们在SQL Server 2000中的实现。 2. T-SQL语言:学习并熟练运用Transact-SQL(T-SQL)进行数据查询、更新、插入和删除操作,以及创建和...

    在SQL SERVER中利用扩展存储过程发送电子邮件.pdf

    总的来说,利用SQL Server的扩展存储过程和Windows组件发送电子邮件提供了一种简单、灵活且不依赖外部邮件服务器的解决方案,特别适合在SQL Server的作业和警报中实现自动化邮件通知。这种方式减少了系统资源的占用...

    SqlServer2005配置数据库邮件

    ### SqlServer2005配置数据库邮件 #### 一、引言 随着信息技术的发展与企业需求的提升,高效地监控信息系统变得尤为重要。SQL Server 2005作为一款功能强大的数据库管理系统,提供了多种用于增强系统监控及自动化...

    SQL Server 2005技术数据库邮件使用方式

    `sp_send_dbmail`是SQL Server内置的存储过程,用于发送邮件。以下是一个基本的使用示例: ```sql EXEC msdb.dbo.sp_send_dbmail @profile_name = 'YourProfileName', @recipients = 'recipient@example.com', @...

    SQLserver2005下载X64

    在"SQL Server x64"这个文件中,包含的是64位版本的安装程序,安装后你可以创建数据库、设计表结构、编写SQL查询,实现数据的增删改查,以及利用视图、索引、存储过程等功能提高数据处理效率。同时,SQL Server 2005...

    基于SQL Server 2000的个人通讯录

    2. **ODBC连接**:利用MFC中的`CDaoDatabase`和`CDaoTableDef`类,通过ODBC驱动程序连接到SQL Server 2000,建立数据库连接。 3. **数据操作**:使用MFC的DAO类进行CRUD(Create、Read、Update、Delete)操作。例如...

    简易邮件系统(jsp+sql server2000)

    该系统利用了Java Server Pages (JSP) 技术作为前端展示,结合SQL Server 2000数据库进行数据存储,实现了基本的邮件收发、管理等功能。 在JSP技术方面,这个系统展示了如何在Web应用中使用Java代码来处理用户请求...

    MS SQL SERVER 2005数据库邮件配置详细步骤图解

    打开“配置工具”-&gt;“SQL Server 2005外围应用配置器”,选择“应用实例”的“数据库邮件”,然后启用“数据库邮件存储过程”。 第四步是具体配置数据库邮件。在Microsoft SQL Server Management Studio中,通过...

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

    本文主要讨论如何利用存储过程和SQL Server Agent(SQL Server代理)的Job功能来实现定时发送邮件。存储过程是预编译的SQL语句集合,可以包含复杂的逻辑和控制流程,非常适合执行定期任务。在SQL Server中,`sp_send...

    SQLServer2005_SSMSEE_x64.rar

    标题中的"SQLServer2005_SSMSEE_x64.rar"表明这是一个关于Microsoft SQL Server 2005的管理工具,特别指出是64位版本,并且是压缩包文件。描述中的“2005 管理工具”进一步确认了这个文件是用于管理和维护SQL Server...

    基于ASP和sql server 2000的电子商务网站

    SQL Server 2000是微软公司的关系型数据库管理系统,广泛应用于企业级数据存储和管理。其特性包括: 1. **强大的数据处理能力**:支持大规模的数据存储和复杂的查询操作,提供事务处理和并发控制,确保数据的一致性...

    借书管理系统-BCB6+SQL Server 2000

    在实际开发过程中,BCB6和SQL Server 2000的集成通常通过ADO(ActiveX Data Objects)实现。ADO是微软提供的一种数据访问接口,它允许BCB6应用程序直接与SQL Server通信,进行数据查询和更新。开发者可以使用...

    sql server 2008 将一列值转换成一个字符串

    本篇文章将详细介绍如何利用SQL Server 2008中的功能来实现这一需求,并深入探讨背后的原理和技术要点。 ### 一、背景与目标 在SQL Server 2008中,有时我们需要将表中的某一列数据合并成一个单独的字符串,例如将...

    Tool For SQL Server

    标题 "Tool For SQL Server" 暗示我们讨论的是一款专为Microsoft SQL Server设计的工具。这款工具可能包含了用于管理、优化、分析或备份SQL Server数据库的各种功能。SQL Server是微软公司开发的一款关系型数据库...

    会议管理系统vb.net+sqlserver2000

    【会议管理系统vb.net+sqlserver2000】是一个基于微软.NET Framework开发的软件应用,主要利用Visual Basic .NET(VB.NET)作为编程语言,并结合SQL Server 2000作为数据库管理系统,来实现对会议的高效管理和组织。...

    Microsoft SQL Server 2000 Reporting Services发布.pdf

    SQL Server Reporting Services 2000通过内置的数据处理功能支持这些操作,比如使用SQL查询、存储过程等。 5. 报表的发布与管理 发布报表是报表服务的重要环节。报表发布后,可以被授权用户通过Web界面查看、打印或...

    asp+sqlserver2000网络书店系统.rar

    这个"asp+sqlserver2000网络书店系统"项目,为初学者提供了一个全面了解ASP和SQL Server 2000集成应用的实例。通过学习和实践,开发者可以掌握Web应用程序开发的基本流程,以及如何利用数据库管理用户数据、实现业务...

    SQL Server自动备份脚本 bat

    标题中的“SQL Server自动备份脚本 bat”指的是在Microsoft SQL Server数据库管理系统中,利用批处理文件(.bat)实现数据库的自动化备份。这样的脚本通常包含T-SQL语句,用于执行备份操作,并且可以设置为Windows...

Global site tag (gtag.js) - Google Analytics