【问题标题】:Export from SQL Server to Excel and Email as Attachment through SQL Agent通过 SQL 代理从 SQL Server 导出到 Excel 和电子邮件作为附件
【发布时间】:2011-11-15 21:37:01
【问题描述】:

我意识到这个问题涉及许多技术,但我只是在这里寻找高水平的贡献。

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

我尝试过的:

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

我想我最大的问题是,如果您要自己解决这个问题(我相信你们中的许多人必须这样做),我应该采用哪种技术路径?

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

提前致谢。

【问题讨论】:

  • 既然要转至 Excel,我们可以假设它的格式丰富,还是 CSV 就足够了? SQL 代理必须是发送电子邮件的机制,还是可以简单地用于安排 Extract-To-Excel-And-Email-Process?

标签: sql-server-2008 excel ssis


【解决方案1】:

如果您的服务器上没有可用的 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 添加到存储过程中并作为作业运行。

【讨论】:

  • 我知道这是一个旧回复,但@tab char(1) = CHAR(9) 今天帮助了我,我所有的结果都出现在一个单元格中。
【解决方案2】:

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

SQL Agent 可以用来启动 SSIS 包,虽然我没用过。

【讨论】:

  • 谢谢哥们。这是我决定走的路线。似乎 SSIS 是一个可以处理需求所有阶段的工具。我会试一试派生列。
  • 感谢分享!加油!
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-17
    • 1970-01-01
    相关资源
    最近更新 更多