通过SQL Agent从SQL Server导出到Excel和Email作为附件



我知道这个问题涉及很多技术,但我在这里只寻找高层次的贡献。

我目前的任务是从SQL Server过程导出到Excel,然后通过SQL代理将Excel文件作为附件通过电子邮件发送。SQL Agent作业必须每天运行。

我已经试过了:

  • SQL -> Excel使用xp_cmdshell和bcp。这很好,但是excel输出将非alpha文本字段更改为数字。(即。电话号码)
  • SQL OpenRowset。据我所知,由于64位Win7,我无法克服缺少Jet 4.0提供商来使用OpenRowset的问题。
  • SSIS。在克服了动态文件名的困境后,当我的数据类型从SQL到Excel不匹配时,我就卡住了。(一些Unicode到非Unicode的问题)
  • 我可以在。net中编写导出过程,但我不知道如何将其附加到SQL代理。

我想我最大的问题是,如果你要自己解决这个问题(我相信你们很多人都必须这样做),我应该走哪条技术道路?

注意:我几乎可以肯定我不应该在服务器上安装Office

如果您的服务器上没有可用的SSIS,您可以使用sp_send_dbmail通过电子邮件发送附加的CSV文件,并使用正确的参数组合:

declare @tab char(1) = CHAR(9)
exec  msdb.dbo.sp_send_dbmail @profile_name='dbProfile', @recipients='email@domain.com', @subject=@emailsubject, @attach_query_result_as_file=1,
    @query = @sqlQuery, @query_attachment_filename='filename.csv',@query_result_separator=@tab,@query_result_no_padding=1

参数的完整列表和它们的作用如下:sp_send_dbmail (Transact-SQL)

可以很容易地将此SQL添加到存储过程中并作为Job运行。

我肯定会使用SSIS。我有一个Data Flow任务读取存储过程输出并写入Excel文件,然后有一个Send Mail任务处理生成的电子表格的电子邮件。(我过去在我的数据流中使用派生列转换清理了Unicode与非Unicode的混淆。)

SQL Agent可以用来启动SSIS包,尽管我还没有使用它。

如果您可以在。net中编写导出,那么在为您的作业设置步骤时,其中一个步骤选项是"操作系统(CmdExec)",这将允许您将其指向您的。net应用程序。

最新更新