Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Кодировка файла при sp_send_dbmail  [new]
user89
Member

Откуда:
Сообщений: 2083
Всем доброго дня! Написал процедуру, которая формирует строку в формате mht для Excel (чтобы несколько листов в одном файле). Эту строку надо отправить в виде вложения. Реализовано успешно, но этот приаттаченный файл Excel не открывает (Report.xls не является допустимой веб-страницей в одной файле)
Но если этот файл сохранить на диске, поменять кодировку на UTF-8 или Windows-1251, то Excel открывает успешно.

Вопрос. Как задать кодировку файла при отправке через sp_send_dbmail ?

Отправляю так:
set nocount on

declare @b varchar(max), @MailQuery varchar(max)

select @b = 'Сложное получение данных из нескольких баз. Результат в формате mht для Excel (чтобы несколько листов в одном файле)'

if object_id('tempdb..##res_tmp_email') is not null drop table ##res_tmp_email
create table ##res_tmp_email (b varchar(max))
insert ##res_tmp_email select @b

select @MailQuery = 'set nocount on select cast(b as varchar(max)) from ##res_tmp_email'

exec msdb.dbo.sp_send_dbmail
@recipients = 'adres@mail.ru',
@subject = 'Тема сообщения',
@query = @MailQuery,
@attach_query_result_as_file = 1,
@query_attachment_filename = 'Report.xls',
@query_result_header = 0,
@query_no_truncate = 1

if object_id('tempdb..##res_tmp_email') is not null drop table ##res_tmp_email


К сообщению приложен файл. Размер - 9Kb
3 окт 13, 16:20    [14919716]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка файла при sp_send_dbmail  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Попробуйте заменить varchar(max) на nvarchar(max) и

select @b = N'Сложное получение данных из нескольких баз. Результат в формате mht для Excel (чтобы несколько листов в одном файле)'
3 окт 13, 16:25    [14919770]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка файла при sp_send_dbmail  [new]
user89
Member

Откуда:
Сообщений: 2083
pkarklin,

увы, не помогло :(
Сделал везде Nvarchar, строку формирую так:
  select @HTML = N'MIME-Version: 1.0' +char(13)+char(10)+
  'X-Document-Type: Workbook' +char(13)+char(10)+
  'Content-Type: multipart/related; boundary="----=_NextPart_d7bacd23_684e_4937_ab27_7aa66cd5e07f"' +char(13)+char(10)+
  ...
Excel не открывает, но если у этого вложенного файла поменять кодировку на UTF-8 или Windows-1251, то всё нормально.
3 окт 13, 16:36    [14919840]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка файла при sp_send_dbmail  [new]
user89
Member

Откуда:
Сообщений: 2083
У нас SQL 2008. Судя по этому топику, возможно будет исправлено в SQL 2012

Решил через bcp, где указывал нужную кодировку
set nocount on
declare @b nvarchar(max), @FileName nvarchar(max), @cmd nvarchar(4000)
set @FileName = 'c:\Temp\Имя файла.xls'

select @b = 'Сложное получение данных из нескольких баз. Результат в формате mht для Excel (чтобы несколько листов в одном файле)'

if object_id('tempdb..##res_tmp_email') is not null drop table ##res_tmp_email
select @b [b] into ##res_tmp_email

select @cmd = 'bcp "select b from ##res_tmp_email" queryout "' + @FileName + '" -c -T -C1251'
exec master.dbo.xp_cmdshell @cmd, no_output

exec msdb.dbo.sp_send_dbmail
@recipients = 'mail@email.ru',
@subject = 'Тема письма',
@file_attachments = @FileName

if object_id('tempdb..##res_tmp_email') is not null drop table ##res_tmp_email
4 окт 13, 13:06    [14923498]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить