Как изменить sp_send_dbmail запрашиваемую кодировку вложений?
Я использую sp_send_dbmail
генерировать и отправлять файлы, которые передаются в другую программу. Программа переваривает кодировку "ANSI/ASCII" и "ISO-8859-1". Но я не могу получить sp_send_dbmail
сделать один.
Вызов процедуры выглядит так
exec msdb.dbo.sp_send_dbmail
@profile_name= @profile_name,
@recipients = @recipients,
@body = @body,
@subject = @subject,
@attach_query_result_as_file = 1,
@query_result_header = 0,
@query_result_no_padding = 1,
@query = @query,
@query_attachment_filename = @fname,
@query_result_width = 4000,
@mailitem_id = @mailitem_id OUTPUT
Таким образом, вложение создается из результатов пройденного запроса. Но полученный файл, который по какой-то причине на самом деле прикреплен к почте, кодируется UCS2 Little Endian. Есть ли способ изменить это?
1 ответ
Найден обходной путь, позволяющий переключаться между UTF/ANSI. Для этого вам нужно изменить sp_send_dbmail
как это:
- Добавить новый параметр в процедуру что-то вроде
@ANSI_Attachment BIT = 0
- Заменить кусок своего кода
IF(@AttachmentsExist = 1) BEGIN ....... END
с
`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_Attachment = 1 используется, она удаляет метку спецификации Unicode перед отправкой.
Посмотрел это решение здесь