кодировка вложения sp_send_dbmail
-
09-06-2019 - |
Вопрос
Я использую sp_send_dbmail в SQL2005 для отправки электронного письма с результатами во вложении.Когда вложение отправляется, оно закодировано в UCS-2, я хочу, чтобы оно было ANSI или UTF-8.
Вот SQL-код
EXEC msdb.dbo.sp_send_dbmail
@recipients = 'temp@example.com'
, @query = 'DECLARE @string_to_trim varchar(60);SET @string_to_trim = ''1234''; select rtrim(@string_to_trim), ''tom'''
, @query_result_header=0
, @subject = 'see attach'
, @body= 'temp body'
, @profile_name= N'wksql01tAdmin'
, @body_format = 'HTML'
,@query_result_separator = ','
,@query_attachment_filename = 'results.csv'
,@query_no_truncate = '0'
,@attach_query_result_as_file = 1
Я видел несколько комментариев в Интернете о том, что это исправлено с помощью sql2005 SP2, но не считаю, что это так.
Решение
Я думаю, единственный способ обойти то, что вы видите, - это использовать BCP для сброса данных в плоский файл, а затем прикрепить этот файл.Извини, что я не смог больше помочь.:(
Другие советы
после некоторого исследования SQL Server 2008 R2:
добавить в sp_send_dbmail БИТ @ANSI_Attachment = 0 ВЫПОЛНИТЬ КАК 'dbo'
заменить
IF(@AttachmentsExist = 1) НАЧАТЬ .......КОНЕЦ
с:
IF(@AttachmentsExist = 1)
BEGIN
if (@ANSI_Attachment = 1)
begin
--Copy temp attachments to sysmail_attachments
INSERT INTO sysmail_attachments(mailitem_id, filename, filesize, attachment)
SELECT @mailitem_id, filename, filesize,
convert(varbinary(max),
substring( -- remove BOM mark from unicode
convert(varchar(max), CONVERT (nvarchar(max), attachment)),
2, DATALENGTH(attachment)/2
)
)
FROM sysmail_attachments_transfer
WHERE uid = @temp_table_uid
end else begin
--Copy temp attachments to sysmail_attachments
INSERT INTO sysmail_attachments(mailitem_id, filename, filesize, attachment)
SELECT @mailitem_id, filename, filesize, attachment
FROM sysmail_attachments_transfer
WHERE uid = @temp_table_uid
end
END
Для того, чтобы файл был ANSI / UTF-8
измените sp_send_dbmail, который находится в msdb
с помощью этой строки наряду с другими переменными: @ANSI_Attachment BIT = 0
т. е.
@mailitem_id INT = NULL OUTPUT,
@ANSI_Attachment BIT = 0
WITH EXECUTE AS 'dbo'
а затем добавьте эту строку в свой вызов sp_send_dbmail:
@ansi_attachment = 1
тогда он должен предоставить вам вложение ansi вместо unicode.