使用TSQL将xlsx格式的文件作为附件发送

时间:2017-07-25 08:53:33

标签: excel tsql export-to-excel sql-job leading-zero

几个星期以来,我一直在寻找这个问题的答案。我需要在excel表格中通过电子邮件发送前一天的查询结果。

要求是:

  1. 从前一天开始从数据库中提取一些数据 - 确定
  2. 通过电子邮件将此查询结果发送为Excel文件(格式为xlsx) - NOK
  3. 问题:

    1. 即使我在@query_attachment_filename中更改格式,输出也仅以CSV格式显示。当我使用xlsx时,无法打开生成的文件。
    2. 在前2列中缺少前导零
    3. 我现在的半工作代码:

          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 =@Query,
      @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。

      有人能帮助我吗?

      由于 迈克尔

1 个答案:

答案 0 :(得分:0)

sp_send_dbmail不会为您生成.xlsx文件。但是,您可以使用here描述的方法使ex_cel中的.csv可以从sp_send_dbmail中读取。

如果您的环境中有SSRS,您可以创建一个发布为excel的报告订阅。