Frage

Ich verwende sp_send_dbmail in SQL2005, um eine E-Mail mit den Ergebnissen im Anhang zu senden.Wenn der Anhang gesendet wird, ist er UCS-2-kodiert, ich möchte, dass er ANSI oder UTF-8 ist.

Hier ist die 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

Ich habe im Internet einige Kommentare gesehen, dass dies mit sql2005 SP2 behoben sei, finde aber nicht, dass dies der Fall ist.

War es hilfreich?

Lösung

Ich denke, die einzige Möglichkeit, das zu umgehen, was Sie sehen, besteht darin, BCP zu verwenden, um die Daten in eine flache Datei zu kopieren und diese Datei dann anzuhängen.Tut mir leid, dass ich Ihnen nicht weiterhelfen konnte.:(

Andere Tipps

nach einigen Recherchen zu SQL Server 2008 R2:

  1. Hinzufügen zu sp_send_dbmail @ansi_attachment bit = 0 mit Ausführung als 'DBO'

  2. ersetzen

    If (@attachmentsexist = 1) Beginnen Sie .......ENDE

mit:

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

Damit die Datei ANSI/UTF-8 ist

Ändern Sie die sp_send_dbmail, die sich in befindet msdb mit dieser Zeile zusammen mit den anderen Variablen: @ANSI_Attachment BIT = 0d.h.

@mailitem_id INT = NULL OUTPUT,
     @ANSI_Attachment BIT = 0
     WITH EXECUTE AS 'dbo'

und fügen Sie dann diese Zeile zu Ihrem Aufruf von sp_send_dbmail hinzu:

@ansi_attachment = 1

dann sollte es Ihnen einen Ansi-Anhang anstelle von Unicode geben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top