【问题标题】:database email with attachement(excel file / pdf file)?带有附件的数据库电子邮件(excel 文件/pdf 文件)?
【发布时间】:2012-11-08 12:52:50
【问题描述】:

我必须从数据库向我的邮件 ID 发送一封带有附件的邮件。

EXEC msdb.dbo.sp_send_dbmail
    @profile_name = 'Adventure Works Administrator',
    @recipients = 'danw@Adventure-Works.com',
    @query = 'SELECT COUNT(*) FROM AdventureWorks2012.Production.WorkOrder
                  WHERE DueDate > ''2004-04-30''
                  AND  DATEDIFF(dd, ''2004-04-30'', DueDate) < 2' ,
    @subject = 'Work Order Count',
    @attach_query_result_as_file = 1 ;

从这段代码中,我得到了 txt 文件中的结果。但我想在 pdf 文件或 excel 文件中获取查询结果

任何知道的方法请与我分享。

提前谢谢!!! :)

【问题讨论】:

    标签: sql-server sql-server-2008 sql-server-2005


    【解决方案1】:

    这会将您的查询结果附加为 csv,如果您喜欢该格式,只需将其更改为 filename.xls。我认为 csv 效果更好,使用 excel 您可能会收到警告,指出文件格式与扩展名指定的格式不同。

    我还使用 CHAR(9) 或 TAB 作为查询结果分隔符,您可以将其更改为适合您的任何内容。

    我还在您的查询中添加了 SET NOCOUNT ON,如果您没有,您将在您的 excel 文件末尾获得(1000 行受影响)(无论您的查询返回多少行)。

    DECLARE
        @tab char(1) = CHAR(9)
    
    EXEC msdb.dbo.sp_send_dbmail
        @profile_name = 'Adventure Works Administrator',
        @recipients = 'danw@Adventure-Works.com',
        @query = 'SET NOCOUNT ON 
                  SELECT COUNT(*) FROM AdventureWorks2012.Production.WorkOrder
                  WHERE DueDate > ''2004-04-30''
                  AND  DATEDIFF(dd, ''2004-04-30'', DueDate) < 2' ,
        @subject = 'Work Order Count',
        @attach_query_result_as_file = 1,
        @query_attachment_filename='filename.csv',
        @query_result_separator=@tab,
        @query_result_no_padding=1
    

    【讨论】:

    • 这实际上并没有回答 OP 的问题,excel 或 pdf。您的建议是创建一个 csv,然后必须手动更新它以具有 xls 扩展名。
    【解决方案2】:

    是否有任何理由必须由 SQL 服务器创建附件?

    我不认为可以这样做,因为查询结果是文本,并且 sql 引擎不知道 PDF 或 excel。您可以使用 XML PATH 属性将结果编写为 HTML 脚本(本页底部的示例:http://msdn.microsoft.com/en-us/library/ms190307.aspx)。

    我猜你可以使用类似的方法来构建一个 xml 字符串,然后在 @query_attachment_filename 变量中使用 .xlsx 扩展名。 Excel 2007+ 本质上是一个 openxml 文件,但我不确定这是否容易/可行。

    【讨论】:

    • 为什么投反对票? OP 专门要求提供 excel 或 pdf 输出,而仅使用 SQL 服务器无法做到这一点。
    【解决方案3】:

    一种方法是使用扩展存储过程 xp_sendmail。它确实需要 您已配置 MAPI 配置文件和 SQL Mail。然后就可以使用了 像这样:

    xp_sendmail
    @recipients = 'email@domain.com',
    @subject = 'Query Results',
    @query = 'SELECT fname, lname FROM Employees WHERE empid = 9'
    

    在上述示例中,查询结果将包含在电子邮件中 信息。在 SQL Server 联机丛书中阅读更多关于附加的 xp_sendmail 的参数。它们控制查询的执行方式(数据库 上下文、数据库用户)以及它的显示方式(标题、格式、附加 查询结果在一个文件中)。

    以下是有关配置 SQL Mail 的更多信息: http://support.microsoft.com/kb/q263556/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-09
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      相关资源
      最近更新 更多