sp_send_dbmail-Anhangskodierung
-
09-06-2019 - |
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.
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:
Hinzufügen zu sp_send_dbmail @ansi_attachment bit = 0 mit Ausführung als 'DBO'
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 = 0
d.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.