sp_send_dbmail кодировка вложений - PullRequest
3 голосов
/ 04 сентября 2008

Я использую 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, но не считаю, что это так.

Ответы [ 3 ]

10 голосов
/ 03 февраля 2013

после некоторых исследований SQL Server 2008 R2:

  1. добавить в sp_send_dbmail @ANSI_Attachment BIT = 0 С EXECUTE AS 'dbo'

  2. заменить

    IF (@AttachmentsExist = 1) НАЧАТЬ ....... 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
0 голосов
/ 26 апреля 2011

Для того, чтобы файл был 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.

0 голосов
/ 04 сентября 2008

Я думаю, что единственный способ обойти то, что вы видите, это использовать BCP для выгрузки данных в плоский файл и затем прикрепить этот файл. Извините, я не могу помочь. (

...