Como Alterar a Codificação de Anexos no sp_send_dbmail
para SQL Server
Enviar e-mails com anexos através do SQL Server pode ser uma tarefa relativamente simples. No entanto, se você encontrar um problema onde o anexo é enviado como codificado em UCS-2 e deseja que ele seja codificado em ANSI ou UTF-8, você não está sozinho. Muitos usuários enfrentaram problemas semelhantes, especialmente ao usar o procedimento armazenado sp_send_dbmail
no SQL Server 2005. Neste post do blog, discutiremos o problema e forneceremos uma solução para garantir que seus anexos sejam codificados corretamente.
O Problema
Ao usar a funcionalidade sp_send_dbmail
para enviar os resultados de consultas SQL como anexos, você pode perceber que os resultados estão codificados no formato UCS-2. Este formato pode ser problemático para os destinatários, pois pode não ser compatível com várias aplicações que esperam formatos ANSI ou UTF-8.
Cenário Exemplo
No seu cenário, a consulta que você executa com sp_send_dbmail
é a seguinte:
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 anexo',
@body= 'corpo temporário',
@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
Apesar de implementar o código SQL acima, seus resultados ainda estão sendo enviados como codificados em UCS-2 e você mencionou alguns comentários sobre uma correção estar disponível no SQL Server 2005 SP2, mas parece que este não é o caso na sua situação.
A Solução
Embora possa haver opções limitadas para alterar a codificação diretamente através do sp_send_dbmail
, você pode contornar esse problema usando a utilidade BCP (Bulk Copy Program).
Usando o BCP para Codificação Adequada
-
Exportar Dados para um Arquivo Plano: Use o BCP para exportar os resultados de sua consulta para um arquivo plano. O BCP permite que você especifique o formato de codificação durante o processo de exportação.
bcp "SELECT RTRIM(@string_to_trim), 'tom'" queryout "C:\caminho\para\results.csv" -c -C 65001 -T
- A opção
-c
indica modo de caractere. - A opção
-C 65001
especifica a codificação UTF-8. - A opção
-T
usa uma conexão confiável com o SQL Server.
- A opção
-
Anexar o Arquivo Plano: Uma vez que o arquivo é gerado com a codificação desejada, você pode então anexar este arquivo ao seu e-mail usando os métodos convencionais. Isso pode ser gerenciado através de um script ou via os trabalhos do SQL Server Agent, onde você pode executar este comando BCP e seguí-lo com sp_send_dbmail para enviar o e-mail.
Resumo dos Passos
- Execute um comando BCP para despejar os resultados de sua consulta em um arquivo .csv com codificação UTF-8.
- Use
sp_send_dbmail
para enviar um e-mail com o anexo .csv.
Conclusão
Embora possa parecer desafiador à primeira vista, resolver o problema de codificação UCS-2 com seus anexos sp_send_dbmail
é viável com o uso do BCP. Seguindo os passos descritos acima, você pode garantir que seus anexos sejam codificados corretamente, facilitando o acesso e a utilização das informações fornecidas pelos seus destinatários.
Se você ainda estiver enfrentando problemas ou tiver mais perguntas, sinta-se à vontade para entrar em contato!