2016-05-28 4 views
0

У меня есть хранимая процедура для отправки электронной почты, которая будет вызываться, когда запись будет вставлена ​​в таблицу. Я хотел прикрепить документ, добавленный в таблицу, и отправить электронное письмо. Я могу получить прикрепленный файл, но его поврежден, когда я его открываю (он говорит, что файл был поврежден).SQL sp_send_dbmail отправлять электронную почту с вложением, файл pdf поврежден

Может ли кто-нибудь мне помочь? вот код, я исключил заявления объявления для простоты.

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

Единственный способ добиться этого - временно экспортировать файл в локальную папку и затем прикрепить его к электронной почте.

set @Pid=CAST(@ID as varchar(100)) 
SELECT @query= 'BCP "SELECT Document from myDB.dbo.myTable where ID ='[email protected]+'" 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.

0

Только текстовые файлы, по-видимому, поддерживаются как вложения, так как они закодированы. Для решения и дополнительной информации вы можете посмотреть this ранее заданный вопрос.

+0

Спасибо, что напомнили мне, что снова. Это действительно сработало. –

0

Использование SQL-сервера 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, 
@[email protected], 
@subject='Send db mailer with attachment', 
@attach_query_result_as_file = 1, 
@query_attachment_filename='filename.xls', 
@[email protected], 
@query_result_no_padding=1