首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 發送 HTML 格式郵件完整實作:sp_send_dbmail 與動態表格產生

     編輯:關於SqlServer

SQL Server 內建 Database Mail 功能支援發送 HTML 格式郵件,可直接將查詢結果轉為精美表格嵌入郵件本文。本文提供完整實作範例,涵蓋動態 HTML 表格產生、條件式發送、郵件設定檔配置與中文編碼處理。

完整實作腳本

DECLARE @tableHTML NVARCHAR(MAX);
DECLARE @d_nowdate DATETIME;
DECLARE @str_subject NVARCHAR(200);
DECLARE @i_result INT;

-- 取得前一日日期 (統計基準日)
SET @d_nowdate = CONVERT(DATETIME, CONVERT(VARCHAR(10), DATEADD(DAY, -1, GETDATE()), 120), 120);

-- 僅當有資料時發送
IF EXISTS (SELECT TOP 1 * FROM t_table1 (NOLOCK) WHERE d_rq = @d_nowdate)
BEGIN
    -- 郵件主旨
    SET @str_subject = N'某某' + CONVERT(VARCHAR(10), @d_nowdate, 120) + N'淨值.';

    -- 動態建構 HTML 表格
    SET @tableHTML = N'

某某


目前測試中
' + N'' + CAST(( SELECT CONVERT(VARCHAR(10), @d_nowdate, 120) AS 'td', '', VC_JJDM AS 'td', '', Vc_jjmc AS 'td', '', EN_JJDWJZ AS 'td', '', EN_LJJZ AS 'td' FROM t_table1 t LEFT JOIN t_table2 tt ON t.VC_JJDM = tt.C_FUNDCODE WHERE d_rq = @d_nowdate ORDER BY Vc_jjmc, VC_JJDM FOR XML PATH('tr'), ELEMENTS ) AS NVARCHAR(MAX)) + N'
日期基金代碼基金名稱淨值累計淨值
'; -- 發送郵件 EXEC @i_result = msdb.dbo.sp_send_dbmail @profile_name = 'Profile-Mail', @recipients = N'郵箱1;郵箱2;郵箱3', @subject = @str_subject, @body = @tableHTML, @body_format = 'HTML'; -- 可檢查 @i_result 判斷發送結果 END

關鍵技術點解析

1. FOR XML PATH('tr') 產生表格列

  • ELEMENTS 選項將每個欄位包裹在 <td> 標籤中。
  • 欄位別名指定為 'td' 並穿插空字串 '',確保每欄獨立成 <td>。

2. sp_send_dbmail 核心參數

3. 中文編碼處理

  • 變數宣告使用 NVARCHAR 儲存 Unicode 內容。
  • HTML 標籤字串前加 N 前綴:N'

    中文

    '
    。
  • 資料庫欄位若為 VARCHAR 存中文,查詢時建議 CAST(欄位 AS NVARCHAR(MAX)) 避免亂碼。

郵件呈現效果

收件者將看到格式化的 HTML 表格:

參數說明
@profile_nameDatabase Mail 設定檔名稱 (需預先在 SSMS 配置)
@recipients收件者,分號分隔多地址
@body_format'HTML' 或 'TEXT',決定本文解析方式
@importance可選:'HIGH'、'NORMAL'、'LOW'
@attach_query_result_as_file可選:將查詢結果另存為附件
日期基金代碼基金名稱淨值累計淨值
2013-12-20111111AAAAA0.983000000.98300000
2013-12-20222222BBBBB1.049000001.04900000

進階擴充建議

  • 加入 CSS 樣式:在 @tableHTML 開頭嵌入 <style> 美化表格。
  • 附件模式:@attach_query_result_as_file = 1, @query_attachment_filename = 'Report.csv'。
  • 錯誤處理:檢查 @i_result 非 0 時記錄失敗原因 (msdb.dbo.sysmail_event_log)。
  • 排程自動化:建立 SQL Agent Job 定時執行此腳本。

善用 sp_send_dbmail 搭配 FOR XML PATH,能將資料庫直接轉化為自動化報表郵件中樞,零程式碼部署即時資訊觸達。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved