sp_send_dbmail encodage des pièces jointes
-
09-06-2019 - |
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.
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 :
Ajouter à SP_SEND_DBMAIL @ANSI_ATTACHment bit = 0 avec exécuter comme 'DBO'
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 = 0
c'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.