SQL sp_send_dbmail发送带附件的电子邮件,pdf文件已损坏

时间:2016-05-28 18:27:14

标签: sql stored-procedures sp-send-dbmail

我有一个发送电子邮件的存储过程,当将记录插入表时将调用该电子邮件。我想附加一个文件添加到表格并发送一封电子邮件。我可以获得附件,但是当我打开它时它已损坏(它说文件已损坏)。

任何人都可以帮助我吗? 这是代码,为了简单起见,我排除了声明语句。

Select @query = 'set nocount on; select cast(Document as varchar(max)) from dbo.myTable where ID = '+ CAST(@ID as varchar(100))

EXEC msdb.dbo.sp_send_dbmail
  @profile_name = 'Profile1', 
  @recipients = @RecipientEmail,
  @subject = @Subject,
  @body = @Body,
  @importance = 'HIGH',
  @query_attachment_filename = 'att.pdf',
  @attach_query_result_as_file = 1,
  @query_result_no_padding=1,
  @query = @query,
  @query_no_truncate = 1,
  @query_result_header  = 0,
  @exclude_query_output = 0,
  @append_query_error = 1,
  @query_result_width = 32767,
  @body_format ='HTML'

我感谢任何帮助。提前谢谢。

3 个答案:

答案 0 :(得分:0)

由于编码的方式,只有文本文件似乎被支持为附件。有关解决方案和更多信息,您可以查看this之前提出的问题。

答案 1 :(得分:0)

我能做到这一点的唯一方法是暂时将文件导出到本地文件夹,然后将其附加到电子邮件中。

set @Pid=CAST(@ID as varchar(100)) 
SELECT @query= 'BCP "SELECT Document from myDB.dbo.myTable where ID ='+@Pid+'" queryout "E:\Log_Files\Attached.pdf" -T -N'
        EXEC xp_cmdshell @query; --, NO_OUTPUT;      


  EXEC msdb.dbo.sp_send_dbmail
  @profile_name = 'Profile1', 
  @recipients = @InviteeEmail,
  @subject = @ReferenceNo,
  @body = @PublicationContent,
  @importance = 'HIGH',
  @file_attachments = 'E:\Log_Files\Attached.pdf',
  @body_format ='HTML' --because

END
Go

您可以阅读有关BCP实用程序here的更多信息。

答案 2 :(得分:0)

使用SQL server 2014.将表名称分为3部分。 servername.dbname.dbo.tblname

DECLARE @Body VARCHAR(8000)
DECLARE @Qry varchar(8000)

SET @Body ='Hi All,'

SET @Qry='set nocount on;select * from tbl_name'

DECLARE
@tab char(1) = CHAR(9)
EXEC msdb.dbo.sp_send_dbmail
@recipients = 'mailid',
@blind_copy_recipients='mailid',
@body= @Body,
@query=@Qry,
@subject='Send db mailer with attachment',
@attach_query_result_as_file = 1,
@query_attachment_filename='filename.xls',
@query_result_separator=@tab,
@query_result_no_padding=1
相关问题