SQL Mail 讓 SQL Server 能透過 Exchange Server 發送/接收郵件,支援警示通知、報表分發等自動化情境。本文詳細說明 xp_sendmail 擴充預存程序的完整參數與用法。
xp_sendmail
[ @recipients = ] 'recipients[;...n]'
[ , [ @message = ] 'message' ]
[ , [ @query = ] 'query' ]
[ , [ @attachments = ] 'attachments' ]
[ , [ @copy_recipients = ] 'copy_recipients[;...n]' ]
[ , [ @blind_copy_recipients = ] 'blind_copy_recipients[;...n]' ]
[ , [ @subject = ] 'subject' ]
[ , [ @type = ] 'type' ]
[ , [ @attach_results = ] 'attach_value' ]
[ , [ @no_output = ] 'output_value' ]
[ , [ @no_header = ] 'header_value' ]
[ , [ @width = ] width ]
[ , [ @separator = ] 'separator' ]
[ , [ @echo_error = ] 'echo_value' ]
[ , [ @set_user = ] 'user' ]
[ , [ @dbuse = ] 'database' ]
| 參數 | 說明 | 預設值 |
|---|---|---|
| @recipients | 收件者郵件地址,多個以分號分隔 (必要) | 無 |
| @message | 郵件本文內容,最長 7990 位元組 | 空白 |
| @query | T-SQL 查詢語句,結果集將附於郵件中,最長 8000 位元組 | 無 |
| @attachments | 附件檔案完整路徑 | 無 |
| @copy_recipients | 副本 (CC) 收件者 | 無 |
| @blind_copy_recipients | 密件副本 (BCC) 收件者,不顯示於郵件中 | 無 |
| @subject | 郵件主旨 | SQL Server Message |
| @type | MAPI 郵件類型 | 空白 |
| @attach_results | 是否將查詢結果作為附件發送 (TRUE/FALSE) | FALSE |
| @no_output | 是否不回傳資訊至 SQL 用戶端 (TRUE/FALSE) | FALSE |
| @no_header | 是否不包含查詢結果欄位名稱 (TRUE/FALSE) | FALSE |
| @width | 查詢結果行寬 (字元數),預設 80,建議設大避免截斷 | 80 |
| @separator | 查詢結果欄位分隔字元 | 空白 |
| @echo_error | 是否在 SQL 用戶端顯示錯誤 (TRUE/FALSE) | FALSE |
| @set_user | 模擬執行的使用者內容 | 目前使用者 |
| @dbuse | 查詢執行的資料庫內容 | 目前資料庫 |
EXEC master..xp_sendmail
@recipients = 'dba@company.com',
@subject = 'SQL Server 警示:磁碟空間不足',
@message = 'C: 磁碟剩餘空間低於 10%,請立即處理。',
@importance = 'HIGH';
EXEC master..xp_sendmail
@recipients = 'sales@company.com',
@subject = '每日銷售報表 ' + CONVERT(VARCHAR(10), GETDATE(), 111),
@query = 'SELECT ProductName, SUM(Amount) AS TotalSales FROM Sales WHERE SaleDate = CONVERT(DATE, GETDATE()) GROUP BY ProductName',
@width = 200,
@separator = ' ',
@no_header = 'FALSE',
@attach_results = 'FALSE';
EXEC master..xp_sendmail
@recipients = 'backup@company.com',
@subject = '資料庫備份完成記錄',
@attachments = 'D:\BackupLogs\backup_20240115.log';
EXECUTE 權限 (預設 public 角色擁有)。掌握 xp_sendmail 完整參數與前置設定,能讓 SQL Server 無縫整合企業郵件系統,實現自動化通知與報表分發。注意權限最小化與非同步處理,避免影響資料庫核心效能。