2008-09-03 5 views
3

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

Voici le SQL

EXEC msdb.dbo.sp_send_dbmail 
    @recipients = '[email protected]' 
    , @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 quelques commentaires sur Internet que cela fixe avec sql2005 SP2, mais ne trouve pas que ce soit le cas.

Répondre

0

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

0

Pour que le fichier soit ANSI/UTF-8

modifier le sp_send_dbmail qui vit dans le msdb avec cette ligne ainsi que les autres variables: @ANSI_Attachment BIT = 0 -à-dire

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

et 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.

7

après quelques recherches sur SQL Server 2008 R2:

  1. Ajouter à la sp_send_dbmail @ANSI_Attachment BIT = 0 EXECUTE AS 'dbo'

  2. remplacer

    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 
+0

Cela semble faire l'affaire! Le fichier est maintenant codé ANSI et s'ouvre bien dans Excel. – Jacco

+0

Pour référence, cela a également fonctionné dans SQL Server 2005 (Merci, @Gena!). J'ai fini par créer un nouveau proc 'sp_send_dbmail2', en espérant que cela soit plus évident que ce n'est pas standard. – chezy525

+0

Entièrement génial. Merci. – Tahari

Questions connexes