Cómo Cambiar la Codificación de Adjuntos en sp_send_dbmail para SQL Server

Enviar correos electrónicos con adjuntos a través de SQL Server puede ser una tarea sencilla. Sin embargo, si encuentras un problema donde el adjunto se envía codificado en UCS-2 y deseas que sea codificado en ANSI o UTF-8, no estás solo. Muchos usuarios han enfrentado problemas similares, especialmente al usar el procedimiento almacenado sp_send_dbmail en SQL Server 2005. En esta publicación de blog, discutiremos el problema y proporcionaremos una solución para asegurarnos de que tus adjuntos estén codificados correctamente.

El Problema

Al usar la funcionalidad sp_send_dbmail para enviar los resultados de consultas SQL como adjuntos, es posible que encuentres que los resultados están codificados en formato UCS-2. Este formato puede ser problemático para los destinatarios, ya que puede no ser compatible con diversas aplicaciones que esperan formatos ANSI o UTF-8.

Escenario Ejemplo

En tu escenario, la consulta que ejecutas con sp_send_dbmail es la siguiente:

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 = 'ver adjunto',
    @body= 'cuerpo temporal',
    @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

Problema Observado

A pesar de implementar el código SQL anterior, tus resultados todavía se envían codificados en UCS-2 y mencionaste algunos comentarios sobre una solución disponible en SQL Server 2005 SP2, pero parece que este no es el caso en tu situación.

La Solución

Aunque puede haber opciones limitadas para cambiar la codificación directamente a través de sp_send_dbmail, puedes solucionar este problema utilizando la utilidad BCP (Bulk Copy Program).

Usando BCP para la Codificación Correcta

  1. Exportar Datos a un Archivo Plano: Utiliza BCP para exportar los resultados de tu consulta a un archivo plano. BCP te permite especificar el formato de codificación durante el proceso de exportación.

    bcp "SELECT RTRIM(@string_to_trim), 'tom'" queryout "C:\ruta\a\results.csv" -c -C 65001 -T
    
    • La opción -c indica el modo de caracteres.
    • La opción -C 65001 especifica la codificación UTF-8.
    • La opción -T utiliza una conexión de confianza a SQL Server.
  2. Adjuntar el Archivo Plano: Una vez que el archivo se genere con la codificación deseada, puedes adjuntar este archivo a tu correo electrónico usando los métodos convencionales. Esto se puede gestionar a través de un script o mediante los trabajos del Agente de SQL Server, donde puedes ejecutar este comando BCP y luego seguirlo con sp_send_dbmail para enviar el correo electrónico.

Resumen de Pasos

  • Ejecuta un comando BCP para volcar los resultados de tu consulta en un archivo .csv con codificación UTF-8.
  • Utiliza sp_send_dbmail para enviar un correo electrónico con el adjunto .csv.

Conclusión

Aunque puede parecer desalentador al principio, resolver el problema de codificación UCS-2 con tus adjuntos de sp_send_dbmail es manejable con el uso de BCP. Siguiendo los pasos descritos anteriormente, puedes asegurarte de que tus adjuntos estén codificados correctamente, facilitando el acceso y uso de la información proporcionada para tus destinatarios.

Si aún enfrentas problemas o tienes más preguntas, ¡no dudes en ponerte en contacto!