So ändern Sie die Anhangscodierung in sp_send_dbmail
für SQL Server
E-Mails mit Anhängen über SQL Server zu senden, kann eine unkomplizierte Aufgabe sein. Wenn Sie jedoch auf ein Problem stoßen, bei dem der Anhang als UCS-2 codiert gesendet wird und Sie möchten, dass es ANSI oder UTF-8 codiert wird, sind Sie nicht allein. Viele Benutzer haben ähnliche Probleme festgestellt, insbesondere bei der Verwendung des sp_send_dbmail
-Speicherverfahrens in SQL Server 2005. In diesem Blogbeitrag werden wir das Problem erörtern und eine Lösung bereitstellen, um sicherzustellen, dass Ihre Anhänge korrekt codiert sind.
Das Problem
Bei der Verwendung der sp_send_dbmail
-Funktionalität zum Senden von SQL-Abfrageergebnissen als Anhänge stellen Sie möglicherweise fest, dass die Ergebnisse im UCS-2-Format codiert sind. Dieses Format kann für die Empfänger problematisch sein, da es möglicherweise nicht mit verschiedenen Anwendungen kompatibel ist, die ANSI- oder UTF-8-Formate erwarten.
Beispiel-Szenario
In Ihrem Szenario sieht die Abfrage, die Sie mit sp_send_dbmail
ausführen, wie folgt aus:
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 = 'siehe Anhang',
@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
Beobachtetes Problem
Trotz der Implementierung des obigen SQL-Codes werden Ihre Ergebnisse immer noch als UCS-2 codiert gesendet, und Sie haben einige Kommentare über einen Fix gemacht, der in SQL Server 2005 SP2 verfügbar sein könnte, aber es scheint, dass dies in Ihrer Situation nicht der Fall ist.
Die Lösung
Obwohl die Möglichkeiten zur direkten Änderung der Codierung über sp_send_dbmail
begrenzt sein können, können Sie dieses Problem umgehen, indem Sie das BCP (Bulk Copy Program)-Dienstprogramm verwenden.
Verwendung von BCP für die richtige Codierung
-
Daten in eine Flachdatei exportieren: Verwenden Sie BCP, um die Ergebnisse Ihrer Abfrage in eine Flachdatei zu exportieren. BCP ermöglicht es Ihnen, das Codierungsformat während des Exportvorgangs festzulegen.
bcp "SELECT RTRIM(@string_to_trim), 'tom'" queryout "C:\path\to\results.csv" -c -C 65001 -T
- Die Option
-c
gibt den Zeichenmodus an. - Die Option
-C 65001
gibt die UTF-8-Codierung an. - Die Option
-T
verwendet eine vertrauenswürdige Verbindung zu SQL Server.
- Die Option
-
Die Flachdatei anhängen: Nachdem die Datei mit der gewünschten Codierung erstellt wurde, können Sie diese Datei dann mit den herkömmlichen Methoden an Ihre E-Mail anhängen. Dies kann über ein Skript oder über die SQL Server-Agent-Jobs verwaltet werden, wo Sie diesen BCP-Befehl ausführen und anschließend
sp_send_dbmail
verwenden können, um die E-Mail zu senden.
Zusammenfassung der Schritte
- Führen Sie einen BCP-Befehl aus, um Ihre Abfrageergebnisse in eine .csv-Datei mit UTF-8-Codierung zu exportieren.
- Verwenden Sie
sp_send_dbmail
, um eine E-Mail mit dem .csv-Anhang zu senden.
Fazit
Obwohl es anfangs entmutigend erscheinen mag, ist es mit der Verwendung von BCP machbar, das UCS-2-Codierungsproblem bei Ihren Anhängen von sp_send_dbmail
zu lösen. Durch Befolgen der oben beschriebenen Schritte können Sie sicherstellen, dass Ihre Anhänge korrekt codiert sind, was es den Empfängern erleichtert, auf die bereitgestellten Informationen zuzugreifen und diese zu nutzen.
Wenn Sie weiterhin Probleme haben oder weitere Fragen haben, zögern Sie nicht, uns zu kontaktieren!