Comment changer l’encodage des pièces jointes dans sp_send_dbmail
pour SQL Server
Envoyer des e-mails avec des pièces jointes via SQL Server peut être une tâche simple. Cependant, si vous rencontrez un problème où la pièce jointe est envoyée avec un encodage UCS-2 et que vous souhaitez qu’elle soit encodée en ANSI ou en UTF-8, vous n’êtes pas seul. De nombreux utilisateurs ont rencontré des problèmes similaires, notamment lors de l’utilisation de la procédure stockée sp_send_dbmail
dans SQL Server 2005. Dans cet article, nous allons discuter du problème et fournir une solution pour garantir que vos pièces jointes soient correctement encodées.
Le Problème
Lorsque vous utilisez la fonctionnalité sp_send_dbmail
pour envoyer les résultats d’une requête SQL sous forme de pièces jointes, vous pouvez constater que les résultats sont encodés en format UCS-2. Ce format peut poser problème au destinataire car il peut ne pas être compatible avec diverses applications qui s’attendent à des formats ANSI ou UTF-8.
Scénario Exemple
Dans votre scénario, la requête que vous exécutez avec sp_send_dbmail
est la suivante :
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 = 'voir la pièce jointe',
@body= 'corps temporaire',
@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
Problème Observé
Malgré la mise en œuvre du code SQL ci-dessus, vos résultats sont toujours envoyés avec un encodage UCS-2 et vous avez mentionné quelques commentaires sur une correction étant disponible dans SQL Server 2005 SP2, mais il semble que cela ne soit pas le cas dans votre situation.
La Solution
Bien qu’il puisse y avoir des options limitées pour changer l’encodage directement via sp_send_dbmail
, vous pouvez contourner ce problème en utilisant l’outil BCP (Bulk Copy Program).
Utilisation de BCP pour un Encodage Correct
-
Exporter les Données vers un Fichier Plat : Utilisez BCP pour exporter les résultats de votre requête dans un fichier plat. BCP vous permet de spécifier le format d’encodage lors du processus d’exportation.
bcp "SELECT RTRIM(@string_to_trim), 'tom'" queryout "C:\path\to\results.csv" -c -C 65001 -T
- L’option
-c
indique le mode caractère. - L’option
-C 65001
spécifie l’encodage UTF-8. - L’option
-T
utilise une connexion de confiance à SQL Server.
- L’option
-
Attacher le Fichier Plat : Une fois que le fichier est généré avec l’encodage souhaité, vous pouvez ensuite attacher ce fichier à votre e-mail en utilisant les méthodes conventionnelles. Cela peut être géré via un script ou par les jobs de l’Agent SQL Server où vous pouvez exécuter cette commande BCP suivie de
sp_send_dbmail
pour envoyer l’e-mail.
Résumé des Étapes
- Exécutez une commande BCP pour déverser les résultats de votre requête dans un fichier .csv avec un encodage UTF-8.
- Utilisez
sp_send_dbmail
pour envoyer un e-mail avec la pièce jointe .csv.
Conclusion
Bien que cela puisse sembler décourageant au départ, résoudre le problème d’encodage UCS-2 avec vos pièces jointes sp_send_dbmail
est gérable grâce à l’utilisation de BCP. En suivant les étapes décrites ci-dessus, vous pouvez vous assurer que vos pièces jointes soient correctement encodées, ce qui facilite l’accès à l’information fournie pour vos destinataires.
Si vous rencontrez toujours des problèmes ou si vous avez d’autres questions, n’hésitez pas à nous contacter !