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

Sql server 带附件的数据库电子邮件(excel文件/pdf文件)?,sql-server,sql-server-2008,sql-server-2005,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 WHER

我必须将一封邮件从数据库发送到带有附件的邮件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 ;
EXEC msdb.dbo.sp\u send\u dbmail
@profile_name='Adventure Works管理员',
@接受者danw@Adventure-Works.com",,
@查询='从AdventureWorks2012.Production.WorkOrder中选择计数(*)
其中,截止日期>“2004-04-30”
和日期差(dd,“2004-04-30”,DueDate)<2',
@主题='工作单计数',
@将\u查询\u结果\u附加为\u文件=1;
从这段代码中,我得到了txt文件中的结果。但是我想在pdf文件或excel文件中获取查询结果

任何已知的方法请与我分享


提前谢谢!!!:)

是否有任何理由必须由SQL server创建附件

我认为这是不可能的,因为查询结果是文本,sql引擎不知道PDF或excel。您可以使用XML路径属性(本页底部的示例:)将结果编写为HTML脚本


我想您可以使用类似的方法构建xml字符串,然后在@query\u attachment\u filename变量中使用.xlsx扩展名。Excel 2007+本质上是一个openxml文件,但我不确定这有多容易/可行。

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

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

我还向查询中添加了SET NOCOUNT,如果您没有,您将在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)=字符(9)
EXEC msdb.dbo.sp_send_dbmail
@profile_name='Adventure Works管理员',
@接受者danw@Adventure-Works.com",,
@query='在上设置NOCOUNT
从AdventureWorks2012.Production.WorkOrder中选择计数(*)
其中,截止日期>“2004-04-30”
和日期差(dd,“2004-04-30”,DueDate)<2',
@主题='工作单计数',
@将查询结果附加为文件=1,
@查询\u附件\u filename='filename.csv',
@查询结果分隔符=@tab,
@查询\u结果\u否\u填充=1

一种方法是使用扩展存储过程xp\u 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的详细信息:

为什么要投否决票?OP特别要求excel或pdf输出,这不能仅使用SQL server完成。这实际上并不能回答OP的问题,excel或pdf。您建议创建一个csv,然后手动更新该csv以获得xls扩展。