我要将数据库中的邮件发送到带附件的邮件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文件中获取查询结果
任何人都知道的意思是请与我分享。
提前谢谢! :)
答案 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/