我有一个发送电子邮件的存储过程,当将记录插入表时将调用该电子邮件。我想附加一个文件添加到表格并发送一封电子邮件。我可以获得附件,但是当我打开它时它已损坏(它说文件已损坏)。
任何人都可以帮助我吗? 这是代码,为了简单起见,我排除了声明语句。
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'
我感谢任何帮助。提前谢谢。
答案 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