2017-07-25 94 views
-1

幾個星期以來,我一直在尋找我有這個問題的答案。我需要通過電子郵件發送前一天在Excel表格中查詢結果。發送xlsx格式的文件作爲附件使用TSQL

的要求是:

  1. 提取自前一天數據庫中的一些數據 - OK
  2. 發送查詢結果爲Excel文件(XLSX格式)通過電子郵件 - NOK

問題:

  1. 即使更改@query_attachment_filename中的格式,輸出也僅爲CSV。當我使用xlsx時,生成的文件無法打開。
  2. 失蹤前2列前導零

我半工作的代碼現在:

use xxx 

DECLARE @AWBPREFIX VARCHAR(255) 
DECLARE @Query VARCHAR(MAX) 
SET @AWBPREFIX = '[sep=,' + CHAR(13) + CHAR(10) + 'AWB.PREFIX]' 
SET @Query = ' 
SET NOCOUNT ON 
SELECT AWB.PREFIX AS ' + @AWBPREFIX + ', 
AWB.SERIAL, 
AWB.ORIGIN, 
AWB.DEST, 
AWB_MOVE.CARRIER, 
AWB.PIECES, 
AWB.WEIGHT, 
AWB_MOVE.PIECES, 
AWB_MOVE.WEIGHT, 
AWB.NATURE_GOODS, 
AWB_MOVE.CARRIER, 
AWB_MOVE.FLIGHT_NUMBER, 
AWB_MOVE.FLIGHT_DATE, 
AWB_MOVE.ORIGIN, 
AWB_MOVE.DEST, 
AWB_MOVE.ULD_NUMBER, 
AWB_MOVE.SHC_LIST 

FROM 
xxx..AWB 
INNER JOIN 
AWB_MOVE ON AWB.SEQ = AWB_MOVE.AWB_SEQ 

GROUP BY 
AWB.PREFIX, 
AWB.SERIAL, 
AWB.ORIGIN, 
AWB.DEST, 
AWB_MOVE.CARRIER, 
AWB.PIECES, 
AWB.WEIGHT, 
AWB_MOVE.PIECES, 
AWB_MOVE.WEIGHT, 
AWB.NATURE_GOODS, 
AWB_MOVE.CARRIER, 
AWB_MOVE.FLIGHT_NUMBER, 
AWB_MOVE.FLIGHT_DATE, 
AWB_MOVE.ORIGIN, 
AWB_MOVE.DEST, 
AWB_MOVE.ULD_NUMBER, 
AWB_MOVE.SHC_LIST, 
AWB_MOVE.action_status 

HAVING AWB_MOVE.FLIGHT_DATE = dateadd(dd,-1,cast(getdate() as date)) AND AWB_MOVE.DEST ="BRU" AND AWB_MOVE.action_status <>"NOT"' 

EXEC msdb.dbo.sp_send_dbmail 
@profile_name = 'Batch', 
@recipients = 'xxx', 
@execute_query_database = 'xxx', 
@subject ='Import extracts', 
@query [email protected], 
@query_result_header = 1, 
@query_result_separator=',', 
@query_result_no_padding=1, 
@query_result_width=32767, 
@attach_query_result_as_file = 1, 
@query_attachment_filename = 'import_batch.csv' 

我不能使用SSIS由於辦公的限制。

有人可以幫我嗎?

感謝 邁克爾

回答

0

sp_send_dbmail不會讓一個.xlsx文件給你。但是,可以使用描述爲here的方法使sp_send_dbmail中的.csv在Excel中可讀。

如果您的環境中有SSRS,則可以創建發佈爲excel的報告訂閱。

相關問題