带附件的数据库电子邮件(excel文件/ pdf文件)?

时间:2012-11-08 12:52:51

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

我要将数据库中的邮件发送到带附件的邮件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文件中获取查询结果

任何人都知道的意思是请与我分享。

提前谢谢! :)

3 个答案:

答案 0 :(得分:13)

这会将您的查询结果附加为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

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

一种方法是使用扩展存储过程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 Books OnLine中阅读更多有关附加内容的信息 xp_sendmail的参数。它们控制查询的执行方式(数据库 上下文,数据库用户)及其显示方式(标题,格式,附加 查询文件中的结果)。

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