从附带附件的SQL服务器发送邮件(动态形成附件)

时间:2014-07-15 05:37:34

标签: sql sql-server

我必须每天早上将报告发送给管理层。为此,我在Sql Server代理中创建了具有以下代码的计划。

EXEC msdb.dbo.sp_send_dbmail
@recipients='bishnu.bhandari@gmail.com',
@body='Dear sir, <Br>Please find the attachment. <P>Regards<Br> <Br>IT Department', 
@subject ='TOURISM-GL( Auto By System) ',
@body_format = 'html',
@profile_name = 'emailserver',
@file_attachments='C:\PUMORI_NEW\**001_TOURISMGL_(14072014)_(SOD).TXT**'

现在问题是,我需要作为附件发送的文件每天都会生成新名称。 文件名格式为

  

001_TOURISMGL_(14072014)_(SOD).TXT

在上述文件名中,只会更改日期值。日期将采用ddmmyyyy格式。

现在请建议我如何实现这一目标。如何使用附件自动发送邮件。

3 个答案:

答案 0 :(得分:1)

是否必须在SQL Server内部?我使用BLAT(或Postie)与Windows任务计划程序和SQLCMD(OSQL也可以)工作的批处理文件,并且工作得很好..

@ECHO OFF
@Rem -----------------------------------------------
@ECHO Procedure to e-mail daily Row Counts
C:
cd\reports

@ECHO Running database query, please wait
if not exist COUNTS.log osql -Sserver\instance -Uyouruser -Pyourpass -n    -iCOUNTS.sql     -oCOUNTS.log -w250

@rem ------------- Mail out report
if exist COUNTS.log Postie.exe -host:smtp.yourcompany.com -to:managers@company.com     -from:you@company.com -s:"Quick Counts for Session/Transaction/User" -file:COUNTS.log -msg:"Please reference below for the row counts for Session/Transaction/Users for DB1/DB2/DB3 Databases. This message was sent from %COMPUTERNAME%"

@for /f "tokens=2-4 delims=/ " %%a in ('date /T') do set dirdate=%%a.%%b.%%c
@if exist COUNTS.log copy COUNTS.log LogBkup\COUNTS-%dirdate%.log
@if exist COUNTS.log del COUNTS.log
rem @exit

答案 1 :(得分:1)

你能试试吗,

declare @pathname varchar(200) = 'C:\PUMORI_NEW\**001_TOURISMGL_(,' + REPLACE(CONVERT(VARCHAR(10),GETDATE(),101),'/', '') + ', )_(SOD).TXT**';

EXEC msdb.dbo.sp_send_dbmail
@recipients='bishnu.bhandari@gmail.com',
@body='Dear sir, <Br>Please find the attachment. <P>Regards<Br> <Br>IT Department', 
@subject ='TOURISM-GL( Auto By System) ',
@body_format = 'html',
@profile_name = 'emailserver',
@file_attachments=@pathname

答案 2 :(得分:1)

您是否有任何理由不能使用内置命令xp_sendmail

它几乎包含您可能想要的每个电子邮件选项。它是sql 2005或2008.旧版本的sql,没有这样的功能,所以人们倾向于使用CDONTS(也是MS),但如果你有SQL 2005或更高版本,我会远离CDONTS。

ADDED(意外过早发布)

事实上,如果您有2008或更高版本,则不应使用xp_sendmail(ha,误导) - 新解决方案是Database mail as documented here这使用存储的proc xp_send_dbmail() - 请注意,这不是默认情况下已启用,但文章会告诉您如何使用DataBase Mail Configuration Wizard