想要执行sp_send_dbmail并以excel格式发送结果

我想执行sp_send_dbmail,并以excel格式发送结果。 我已经尝试过.csv和.txt,但是结果不是整齐排列的。

这是我的代码

EXEC msdb.dbo.sp_send_dbmail @profile_name = 'DBMail_profile', @recipients = 'myaddress@me.com', @subject = 'Test', @query = N'EXEC DatabaseTest.dbo.test', @attach_query_result_as_file = 1, @query_result_width = 150, @query_result_header= 1, @query_attachment_filename = 'test.txt', @importance = 'High', @query_result_no_padding = 1 

也试过这个

 EXEC msdb.dbo.sp_send_dbmail @profile_name = 'DBMail_profile', @recipients = 'myaddress@me.com', @subject = 'Test', @query = N'EXEC DatabaseTest.dbo.test', @attach_query_result_as_file = 1, @query_result_width = 150, @query_result_header= 1, @query_attachment_filename = 'test.csv', @importance = 'High', @query_result_no_padding = 1 

我想我的结果是在一个干净的有组织的格式。 我有一些参数设置不正确吗? 或者有没有办法将附件作为.xls或.xlsx文件? 我可能会错误地解释,我可以回答任何问题

这是我从.csv获得的

 EventDate FirstName LastName Department DeptCode OpCode Start Finish ElapsedTime Units UPH 

 2017-05-30 My Name Flat LL PP 07:00:00 07:15:00 00:15:00 700 2800 2017-05-31 His Name Maintenance FK PR 08:00:00 08:30:00 00:30:00 100 200 2017-05-30 Her Name Hang SD OC 12:32:00 14:31:00 01:59:00 23 12 

当我有@query_attachment_file ='test.xlsx'时,附件与.csv提供的相同。

我想看到这样的依恋

 2017-05-30 My Name Flat LL PP 07:00:00 07:15:00 00:15:00 700 2800 2017-05-31 His Name Maintenance FK PR 08:00:00 08:30:00 00:30:00 100 200 2017-05-30 Her Name Hang SD OC 12:32:00 14:31:00 01:59:00 23 12 

存储过程.dbo.test看起来像这样

 DECLARE @Now DATETIME, @EndReportDate DATETIME, @StartReportDate DATETIME, @StartTime VARCHAR(16) , @EndTime VARCHAR(16) SET @Now = GETDATE() SET @EndReportDate = DATEADD(dd, DATEDIFF(dd, 0, @Now), -1) SET @StartReportDate = DATEADD(dd, DATEDIFF(dd, 0, @Now), -9) SET @StartTime = '01:00:00AM' SET @EndTime = '11:59:00PM' SELECT TimeLog.EventDate AS 'EventDate' ,AssociateInfo.FirstName 'FirstName' ,AssociateInfo.LastName 'LastName' ,AssociateInfo.Department 'Department' ,TimeLog.DeptCode 'DeptCode' ,TimeLog.OpCode 'OpCode' ,TimeLog.StartTime 'Start' ,TimeLog.FinishTime 'Finish' ,ElapsedTime = convert(time(0),dateadd(second,datediff(second,StartTime,FinishTime),0)) ,TimeLog.Units ,UPH = cast(isnull(Units / nullif(datediff(minute,StartTime,FinishTime)*1.0,0),0.0) *60 as decimal(10,0)) FROM dbo.TimeLog INNER JOIN dbo.AssociateInfo WITH (NOLOCK) ON AssociateInfo.ID = TimeLog.ID WHERE EventDate BETWEEN @StartReportDate + ' ' + @StartTime AND @EndReportDate + ' ' + @EndTime ORDER BY UPH DESC 

试试这个TAB作为结果分隔符:

 EXEC msdb.dbo.sp_send_dbmail @profile_name = 'DBMail_profile', @recipients = 'myaddress@me.com', @subject = 'Test', @query = N'EXEC DatabaseTest.dbo.test', @attach_query_result_as_file = 1, @query_result_width = 150, @query_result_header= 1, @query_attachment_filename = 'test.txt', @importance = 'High', @query_result_no_padding = 1, @query_result_separator = ' '