2013-04-10 4 views
0

J'utilise sp_send_dbmail pour générer et envoyer des fichiers qui sont transmis à un autre programme. Le programme digère l'encodage "ANSI/ASCII" et "ISO-8859-1". Mais je ne peux pas obtenir sp_send_dbmail pour en faire un.Comment changer l'encodage des pièces jointes sp_send_dbmail?

appel de procédure ressemble à ce

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 

Ainsi, la pièce jointe est créée à partir des résultats de recherche passé. Mais le fichier résultant qui est réellement attaché au courrier pour une raison quelconque est encodé avec UCS2 Little Endian. Y a-t-il un moyen de le changer?

+0

double possible de [sp \ _Envoyer \ _dbmail exécuté de travail tombe en panne, avec un résultat de requête joint en file] (http://stackoverflow.com/questions/15112849/sp-send-dbmail- exécuté-de-travail-échoue-avec-requête-résultat-joint-en-fichier) – EdChum

Répondre

3

Solution de contournement trouvée permettant de basculer entre UTF/ANSI. Pour ce faire, vous devez modifier sp_send_dbmail comme ça:

  1. Ajouter un nouveau paramètre à la procédure somemthing comme @ANSI_Attachment BIT = 0
  2. Remplacer morceau de son code IF(@AttachmentsExist = 1) BEGIN ....... END 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 ` 

Ceci fait la même chose mais si dans L'appel de procédure @ANSI_Attachment = 1 est utilisé pour supprimer la marque de nomenclature unicode avant l'envoi.

regardé à cette solution here

Questions connexes