楼主: Cherish_j_wang

[精华] MSSQL DBA 精华总结[处理对象名称中特殊字符]

[复制链接]
论坛徽章:
14
迷宫蛋
日期:2012-03-13 09:50:292014年新春福章
日期:2014-02-18 16:44:08优秀写手
日期:2013-12-18 09:29:15迷宫蛋
日期:2012-06-13 15:28:34咸鸭蛋
日期:2012-06-11 16:11:11灰彻蛋
日期:2012-05-31 10:18:54双黄蛋
日期:2012-05-28 17:45:17茶鸡蛋
日期:2012-05-28 17:27:32蜘蛛蛋
日期:2012-05-28 16:54:09迷宫蛋
日期:2012-05-17 19:00:48
91#
 楼主| 发表于 2012-6-17 11:19 | 只看该作者
wuzd12 发表于 2012-6-13 10:48
学习中,得到进步,大家会感谢你无私的奉献,在路上,继续支持

哥,你2005年就注册啦。技术积分是不是少了点哦~

使用道具 举报

回复
论坛徽章:
1
2013年新春福章
日期:2013-02-25 14:51:24
92#
发表于 2012-6-20 16:08 | 只看该作者
本帖最后由 路人ABCD 于 2012-6-20 16:08 编辑

分享一个存储过程,是建立一个发送Email的存储过程。

Create PROCEDURE [dbo].[Sp_SendEmail]     
@From varchar(100)='EmailAddress@163.com' ,      
@To varchar(100)='RecipientUser@163.com' ,      
@Bcc varchar(500)='',      
@Subject varchar(400)='测试',      
@Body ntext ='测试邮件!'      

AS      
--配置先执行      
/*      
GO      
sp_configure 'show advanced options', 1;      
GO      
RECONFIGURE;      
GO      
sp_configure 'Ole Automation Procedures', 1;      
GO      
RECONFIGURE;      
GO*/      
if exists(select 1)      
begin      
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', 'smtp.163.com'      

--下面三条语句是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','EmailAddress@163.com'      
EXEC @hr = sp_OASetProperty @object, 'Configuration.fields("http://schemas.microsoft.com/cdo/configuration/sendpassword").Value','EmailPassword'      

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', @From      
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 '发送失败'      
    RETURN @object      
END      
PRINT 'success'      
EXEC @hr = sp_OADestroy @object      
end

使用道具 举报

回复
论坛徽章:
14
迷宫蛋
日期:2012-03-13 09:50:292014年新春福章
日期:2014-02-18 16:44:08优秀写手
日期:2013-12-18 09:29:15迷宫蛋
日期:2012-06-13 15:28:34咸鸭蛋
日期:2012-06-11 16:11:11灰彻蛋
日期:2012-05-31 10:18:54双黄蛋
日期:2012-05-28 17:45:17茶鸡蛋
日期:2012-05-28 17:27:32蜘蛛蛋
日期:2012-05-28 16:54:09迷宫蛋
日期:2012-05-17 19:00:48
93#
 楼主| 发表于 2012-6-23 08:55 | 只看该作者
路人ABCD 发表于 2012-6-20 16:08
分享一个存储过程,是建立一个发送Email的存储过程。

Create PROCEDURE [dbo].[Sp_SendEmail]     

哇哦~自己写一个邮件发送功能的SP啊,很强悍哦,佩服。不过SQL Server 20008,微软自己提供有系统的存储过程,用来发送邮件的。
msdb.dbo.sp_send_dbmail

使用道具 举报

回复
论坛徽章:
26
ITPUB伯乐
日期:2012-05-22 15:05:35喜羊羊
日期:2015-05-14 12:15:30美羊羊
日期:2015-07-02 22:22:59秀才
日期:2015-08-24 09:51:48天枰座
日期:2015-11-05 16:53:35双鱼座
日期:2015-12-05 19:22:56巨蟹座
日期:2015-12-20 18:46:10摩羯座
日期:2016-05-19 09:54:17ITPUB15周年纪念
日期:2016-10-13 13:15:34秀才
日期:2017-02-22 15:16:26
94#
发表于 2012-6-23 21:33 | 只看该作者
我这也有个发送邮件的存储过程.2000,2005,2008都可以.
  1. CREATE PROCEDURE [dbo].[SendMail_cdo_sp]
  2.            @From varchar(100) ,
  3.            @To varchar(8000) ,
  4.            @Cc varchar(8000) = '',
  5.            @Bcc varchar(8000) = '',
  6.            @Subject varchar(200)=" ",
  7.            @Body varchar(8000) =" " ,
  8.            @Attachment varchar(8000) = '',
  9.            @SMTPServer varchar(20) ='',                -- Added by Darrell 07/07/2006
  10.            @SMTPServer2 varchar(20) =''                -- Added by Darrell 07/07/2006

  11.         /*********************************************************************
  12.        
  13.         To Send Mail:
  14.         exec master..SendMail_cdo_sp
  15.                 @From = 'darrellshen@foxconn.com',
  16.                 @To = 'darrellshen@q-edge.com;darrellshen@foxconn.com',
  17.                 @Cc = '',
  18.                 @Bcc = '',
  19.                 @Subject = 'Subject',
  20.                 @Body = 'Mail Body -- My Message',
  21.                 @Attachment = ''
  22.        
  23.         ***********************************************************************/
  24.            AS
  25.            Declare @iMsg int
  26.            Declare @hr int
  27.            Declare @ErrorMessage varchar(200)

  28.            IF @SMTPServer = '' Set @SMTPServer = '10.17.48.12'
  29.            IF @SMTPServer2 = '' Set @SMTPServer2 = '10.17.49.15'
  30.        
  31.         --************* Create the CDO.Message Object ************************
  32.            EXEC @hr = sp_OACreate 'CDO.Message', @iMsg OUT
  33.            IF @hr <> 0
  34.                 begin
  35.                         set @ErrorMessage = 'Error On CreateObject'
  36.                         GOTO ObjectError
  37.                 end
  38.        
  39.         --***************Configuring the Message Object ******************
  40.         -- This is to configure a remote SMTP server.
  41.         -- http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cdosys/html/_cdosys_schema_configuration_sendusing.asp
  42.         send_cdosysmail_config:
  43.            EXEC @hr = sp_OASetProperty @iMsg, 'Configuration.fields("http://schemas.microsoft.com/cdo/configuration/sendusing").Value','2'
  44.            IF @hr <> 0
  45.                 begin
  46.                         set @ErrorMessage = 'Error On Configuration'
  47.                         GOTO ObjectError
  48.                 end

  49.         -- This is to configure the Server Name or IP address.
  50.         -- Replace MailServerName by the name or IP of your SMTP Server.
  51.            EXEC @hr = sp_OASetProperty @iMsg, 'Configuration.fields("http://schemas.microsoft.com/cdo/configuration/smtpserver").Value', @SMTPServer
  52.            IF @hr <> 0
  53.                 begin
  54.                         set @ErrorMessage = 'Error On Configuration SMTP Server ' + @SMTPServer
  55.                         GOTO ObjectError
  56.                 end
  57.        
  58.         -- Save the configurations to the message object.
  59.            EXEC @hr = sp_OAMethod @iMsg, 'Configuration.Fields.Update', null
  60.            IF @hr <> 0
  61.                 begin
  62.                         set @ErrorMessage = 'Error On Configuration Update'
  63.                         GOTO ObjectError
  64.                 end
  65.        
  66.         -- Set the e-mail parameters.
  67.            EXEC @hr = sp_OASetProperty @iMsg, 'From', @From
  68.            IF @hr <> 0
  69.                 begin
  70.                         set @ErrorMessage = 'Error On Setting From Address'
  71.                         GOTO ObjectError
  72.                 end

  73.            EXEC @hr = sp_OASetProperty @iMsg, 'To', @To
  74.            IF @hr <> 0
  75.                 begin
  76.                         set @ErrorMessage = 'Error On Setting To Address'
  77.                         GOTO ObjectError
  78.                 end

  79.         if len(@Cc) > 0
  80.          begin
  81.            EXEC @hr = sp_OASetProperty @iMsg, 'Cc', @Cc
  82.            IF @hr <> 0
  83.                 begin
  84.                         set @ErrorMessage = 'Error On Setting To Address'
  85.                         GOTO ObjectError
  86.                 end
  87.          end

  88.         if len(@Bcc) > 0
  89.          begin
  90.            EXEC @hr = sp_OASetProperty @iMsg, 'Bcc', @Bcc
  91.            IF @hr <> 0
  92.                 begin
  93.                         set @ErrorMessage = 'Error On Setting To Address'
  94.                         GOTO ObjectError
  95.                 end
  96.          end

  97.            EXEC @hr = sp_OASetProperty @iMsg, 'Subject', @Subject
  98.            IF @hr <> 0
  99.                 begin
  100.                         set @ErrorMessage = 'Error On Setting Subject'
  101.                         GOTO ObjectError
  102.                 end
  103.        
  104.         -- If you are using HTML e-mail, use 'HTMLBody' instead of 'TextBody'.
  105.            EXEC @hr = sp_OASetProperty @iMsg, 'TextBody', @Body
  106.            IF @hr <> 0
  107.                 begin
  108.                         set @ErrorMessage = 'Error On Setting Mail Body'
  109.                         GOTO ObjectError
  110.                 end

  111.         if len(@Attachment) > 0
  112.          begin
  113.            exec master..xp_fileexist @Attachment, @hr output
  114.            if @hr = 1
  115.               --EXEC @hr = sp_OAMethod @iMsg, 'AddAttachment', NULL, @Attachment
  116.                 EXEC sp_OAMethod @iMsg, 'AddAttachment', NULL, @Attachment
  117.            else
  118.                 begin
  119.                         set @ErrorMessage = @Attachment + 'Does Not Exist !!'
  120.                         GOTO ObjectError
  121.                 end
  122.          end

  123.         print 'Using SMTP Server ' + @SMTPServer + ' On ' + convert(char(19),getdate(),120)
  124.            EXEC @hr = sp_OAMethod @iMsg, 'Send', NULL

  125.            IF @hr <>0 and @SMTPServer <> @SMTPServer2
  126.              BEGIN
  127.                 -- Support the 2nd SMTP Server 07/07/2006
  128.                 set @SMTPServer = @SMTPServer2
  129.                 GOTO send_cdosysmail_config
  130.              END
  131.           
  132.            IF @hr <> 0
  133.                 begin
  134.                         set @ErrorMessage = 'Error On Send Mail'
  135.                         GOTO ObjectError
  136.                 end

  137.         -- Do some error handling after each step if you have to.
  138.         -- Clean up the objects created.
  139.         send_cdosysmail_cleanup:
  140.         If (@iMsg IS NOT NULL) -- if @iMsg is NOT NULL then destroy it
  141.         BEGIN
  142.                 EXEC @hr=sp_OADestroy @iMsg
  143.        
  144.                 -- handle the failure of the destroy if needed
  145.                 IF @hr <> 0 GOTO ObjectError
  146.         END

  147. PRINT 'Message sent.'
  148. RETURN 0

  149. ObjectError:
  150. BEGIN
  151. Print @ErrorMessage
  152. RETURN 1
  153. END




  154. GO
复制代码

使用道具 举报

回复
论坛徽章:
1
2013年新春福章
日期:2013-02-25 14:51:24
95#
发表于 2012-6-23 23:41 | 只看该作者
请教一个问题,发送邮件的存储过程只能是少量纯文本的,如何定义才可以发送大量的文本信息呢?
另外,如果邮件需要带上附件该如何实现比较好呢?

使用道具 举报

回复
论坛徽章:
26
ITPUB伯乐
日期:2012-05-22 15:05:35喜羊羊
日期:2015-05-14 12:15:30美羊羊
日期:2015-07-02 22:22:59秀才
日期:2015-08-24 09:51:48天枰座
日期:2015-11-05 16:53:35双鱼座
日期:2015-12-05 19:22:56巨蟹座
日期:2015-12-20 18:46:10摩羯座
日期:2016-05-19 09:54:17ITPUB15周年纪念
日期:2016-10-13 13:15:34秀才
日期:2017-02-22 15:16:26
96#
发表于 2012-6-24 13:20 | 只看该作者
路人ABCD 发表于 2012-6-23 23:41
请教一个问题,发送邮件的存储过程只能是少量纯文本的,如何定义才可以发送大量的文本信息呢?
另外,如果 ...

你可以看下我上面的存储过程,
里面可以发送附件.

使用道具 举报

回复
论坛徽章:
14
迷宫蛋
日期:2012-03-13 09:50:292014年新春福章
日期:2014-02-18 16:44:08优秀写手
日期:2013-12-18 09:29:15迷宫蛋
日期:2012-06-13 15:28:34咸鸭蛋
日期:2012-06-11 16:11:11灰彻蛋
日期:2012-05-31 10:18:54双黄蛋
日期:2012-05-28 17:45:17茶鸡蛋
日期:2012-05-28 17:27:32蜘蛛蛋
日期:2012-05-28 16:54:09迷宫蛋
日期:2012-05-17 19:00:48
97#
 楼主| 发表于 2012-6-25 08:18 | 只看该作者
本帖最后由 Cherish_j_wang 于 2012-6-25 16:16 编辑
路人ABCD 发表于 2012-6-23 23:41
请教一个问题,发送邮件的存储过程只能是少量纯文本的,如何定义才可以发送大量的文本信息呢?
另外,如果 ...

哎,其实,我在写这个帖子的时候,我就猜到肯定会有朋友问如此的问题。所以,我在帖子中不厌其烦的强调“慎用Database Mail”,请不要把我昂贵的数据库系统当成OUTLOOK来用。MSSQL Server提供这个功能,只是为中小型企业提供了发送邮件的解决方法,但是对于大型数据库系统,还是那句话,请”慎用Database Mail“。

回答你的问题:
1.大量文本:存储过程msdb.dbo.sp_send_dbmail中的邮件内容参数@body是nvarchar(max),可以支持到2GB的文本,所以,应该够你使用了。
2.关于附件:该存储过程支持查询结果集附件和某个路径下的附件(由参数@file_attachments指定绝对路径,如多个附件,请使用分号隔开 )两种方式。详情,参见帮助文档。

使用道具 举报

回复
论坛徽章:
14
奥运会纪念徽章:自行车
日期:2008-04-25 21:00:142013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-10 13:11:14奥运会纪念徽章:皮划艇激流回旋
日期:2012-08-13 10:25:38鲜花蛋
日期:2012-02-10 11:40:172010新春纪念徽章
日期:2010-03-01 11:04:58授权会员
日期:2010-01-12 09:40:47ITPUB元老
日期:2010-01-12 09:33:092009新春纪念徽章
日期:2009-01-04 14:52:28奥运会纪念徽章:拳击
日期:2008-10-24 13:22:33
98#
发表于 2012-6-25 13:40 | 只看该作者
mark

使用道具 举报

回复
论坛徽章:
0
99#
发表于 2012-6-27 09:50 | 只看该作者
非常感謝...大有用處

使用道具 举报

回复
论坛徽章:
1
2013年新春福章
日期:2013-02-25 14:51:24
100#
发表于 2012-6-27 19:18 | 只看该作者
问一个问题:sql 数据库跨服务器备份如何设置?
在一个广域网内,内网ip。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表