Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
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] Ответить | Цитировать Сообщить модератору |
pkarklin Member Откуда: Москва (Муром) Сообщений: 74925 |
Попробуйте заменить varchar(max) на nvarchar(max) иselect @b = N'Сложное получение данных из нескольких баз. Результат в формате mht для Excel (чтобы несколько листов в одном файле)' |
3 окт 13, 16:25 [14919770] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
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 | ![]() |