2017-06-01 247 views
2

我想執行sp_send_dbmail並以excel格式通過電子郵件發送結果。我嘗試過.csv和.txt,但結果沒有按整齊的列組織。想執行sp_send_dbmail並以excel格式發送結果

這是我的代碼

EXEC msdb.dbo.sp_send_dbmail 
@profile_name = 'DBMail_profile', 
@recipients = '[email protected]', 
@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 = '[email protected]', 
@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 
+0

什麼'test'存儲過程看起來像什麼? –

+2

試試這個:https://stackoverflow.com/questions/15209620/how-to-send-a-query-result-in-csv-format。 TLDR:使用@query_result_separator添加逗號。或者,您可以將查詢的輸出作爲HTML郵件發送。 – SchmitzIT

+0

@WEI_DBA我在上面添加了SP :) – DRUIDRUID

回答

3

試試這個TAB作爲結果分離:

EXEC msdb.dbo.sp_send_dbmail 
@profile_name = 'DBMail_profile', 
@recipients = '[email protected]', 
@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 = '  ' 
+0

剛剛嘗試過,如果數據長度不同,列仍然像以前一樣報告,而不是直列 – DRUIDRUID

+0

@DRUIDRUID嘗試選項卡作爲分隔符! –

+0

@DRUIDRUID我更新了答案 –

相關問題