Sql-Server
數據庫郵件的 CSV 附件編碼不正確
我有一個生成結果集的過程,我將其作為 CSV 文件附件附加到 sp_sendmail 中。但是,生成的文件編碼為 UCS-2 LE BOM(根據 notepad++)。這會導致生成的文件不會“解析”到列中,而是以列 A 中的所有值打開。如果我將編碼更改為 UTF-8,則它可以正常打開。
問題:
這對我來說很容易解決……但收件人不知道如何做到這一點。我可以更改要生成為 UTF-8 的文件嗎?
用於生成發送郵件的程式碼:
exec msdb.dbo.sp_send_dbmail @subject = @subject , @body = @message , @body_format = 'html' , @recipients = @recipients_to , @copy_recipients = @recipients_cc , @importance = 'High' , @sensitivity = 'Confidential' , @query = N'select * from ##Report' , @execute_query_database = @dbName , @attach_query_result_as_file = 1 , @query_attachment_filename = @file_name , @query_result_header = 1 , @query_result_no_padding = 1 , @query_result_separator = ',' , @query_result_width = 32767;
我建議您使用 powershell 生成附件,然後發送附件:
$reportQuery = "select * from ##Report" $filePath = "\\aaaa\bbbb\attach.csv" $mailQuery = " EXEC msdb..sp_send_dbmail @profile_name = '..', @recipients = '..', @subject = '..', @file_attachments = '" + $filePath + "'", ..... (others parameters) Invoke-Sqlcmd -query $reportQuery | export-csv $filePath -encoding "unicode" $result = Invoke-Sqlcmd -query $mailQuery
這似乎是該過程如何工作的某種限制,
sp_send_dbmail
但是您可以嘗試通過此StackOverflow 答案對過程進行一些更改來嘗試解決方法。**警告:**我不建議更改實際程序本身,而是我會製作您自己的程序副本來工作,以盡量減少對您的實例的沖洗。
此外,只是切線相關,但我發現這篇關於通過 CLR 發送郵件的 RedGate 文章反而很有趣,也許對你有幫助,可以作為替代方案。