Jon*_*des 5 sql-server-2008 database-mail
这是非常微不足道的,但如果有人手头有答案,我会很感激。
我使用msdb..sp_send_dbmail存储过程作为分发简单报告的轻量级方法。这通常需要生成 CSV。但是,存储过程包括 Unicode little-endian 前缀 FF FE。这会混淆 Excel,导致它不会自动将 CSV 解析为列。
有许多变通方法:使用真正的报告平台(我们有 Crystal,但它从来没有可靠地工作过);将文件发送到一个小应用程序,该应用程序将文件转换为 ANSI 并继续发送;使用制表符分隔符(我最喜欢的);或教育收件人如何使用 CSV(开个玩笑,我们都知道这是不可能的)。
但是,我很想在某处拨动一个开关并告诉 SQL Server 停止将附件创建为 Unicode,因为我没有这样的需要。我还没有找到这样的设置;这可能吗?
谢谢!
编辑
根据 Rohan 的回答,SQL 代理作业步骤中的这个脚本几乎可以工作:
$reportQuery = "EXEC Routine..TopTenReviewsReport @DoNotLog = 1"
$filePath = "\\SQLBI001\RawData\TopTenReviewsReport.csv"
$mailQuery = "
EXEC msdb..sp_send_dbmail
@profile_name = 'X',
@recipients = 'X',
@subject = 'X',
@file_attachments = '" + $filePath + "'"
Invoke-Sqlcmd -query $reportQuery | export-csv $filePath
$result = Invoke-Sqlcmd -query $mailQuery
Run Code Online (Sandbox Code Playgroud)
该文件现在有一个“#TYPE System.Data.DataRow”前缀,而不是 0xFF FE,但它现在是 ANSI,所以就是这样。
我认为你可以使用powershell生成报告,然后使用DBMail邮寄附件
Write-host "Running SQL Query to export to ANSI CSV file"
Invoke-Sqlcmd -Query $dbQuery -ServerInstance $instanceName | export-csv $targetFileAnsi
Write-host "Running SQL Query to export to Unicode CSV file"
Invoke-Sqlcmd -Query $dbQuery -ServerInstance $instanceName | export-csv $targetFileUnicode -encoding "unicode"
$dbMailQuery1 = "execute msdb..sp_send_dbmail
@profile_name = 'msft_profile',
@recipients = 'seths@microsoft.com',
@subject = 'Email with Attachment - ANSI attachment',
@body_format = 'TEXT',
@body = 'This email has ANSI file attached to it',
@file_attachments = 'c:\temp\result_ansi.csv' "
Run Code Online (Sandbox Code Playgroud)
来源:链接
| 归档时间: |
|
| 查看次数: |
4316 次 |
| 最近记录: |