Question

J'utilise sp_send_dbmail dans SQL2005 pour envoyer un e-mail avec les résultats en pièce jointe.Lorsque la pièce jointe est envoyée, elle est codée en UCS-2, je veux qu'elle soit ANSI ou UTF-8.

Voici le 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

J'ai vu des commentaires sur Internet indiquant que ce problème était résolu avec sql2005 SP2, mais je ne trouve pas que ce soit le cas.

Était-ce utile?

La solution

Je pense que la seule façon de contourner ce que vous voyez est d'utiliser BCP pour transférer les données dans un fichier plat, puis de joindre ce fichier.Désolé, je ne pourrais pas être plus utile.:(

Autres conseils

après quelques recherches sur SQL Server 2008 R2 :

  1. Ajouter à SP_SEND_DBMAIL @ANSI_ATTACHment bit = 0 avec exécuter comme 'DBO'

  2. remplacer

    If (@AttachmentSexist = 1) commencer .......FIN

avec:

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

Pour que le fichier soit ANSI/UTF-8

modifier le sp_send_dbmail qui réside dans le msdb avec cette ligne avec les autres variables : @ANSI_Attachment BIT = 0c'est à dire.

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

puis ajoutez cette ligne à votre appel à sp_send_dbmail :

@ansi_attachment = 1

alors il devrait vous donner une pièce jointe ansi au lieu d'unicode.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top