sp_send_dbmail 詳解


sp_send_dbmail [ [ @profile_name = ] 'profile_name' ]
    
[ , [ @recipients = ] 'recipients [ ; n ]' ]
    
[ , [ @copy_recipients = ] 'copy_recipient [ ; n ]' ]
    
[ , [ @blind_copy_recipients = ] 'blind_copy_recipient [ ; n ]' ]
    
[ , [ @subject = ] 'subject' ] 
    
[ , [ @body = ] 'body' ] 
    
[ , [ @body_format = ] 'body_format' ]
    
[ , [ @importance = ] 'importance' ]
    
[ , [ @sensitivity = ] 'sensitivity' ]
    
[ , [ @file_attachments = ] 'attachment [ ; n ]' ]
    
[ , [ @query = ] 'query' ]
    
[ , [ @execute_query_database = ] 'execute_query_database' ]
    
[ , [ @attach_query_result_as_file = ] attach_query_result_as_file ]
    
[ , [ @query_attachment_filename = ] query_attachment_filename ]
    
[ , [ @query_result_header = ] query_result_header ]
    
[ , [ @query_result_width = ] query_result_width ]
    
[ , [ @query_result_separator = ] 'query_result_separator' ]
    
[ , [ @exclude_query_output = ] exclude_query_output ]
    
[ , [ @append_query_error = ] append_query_error ]
    
[ , [ @query_no_truncate = ] query_no_truncate ]
    
[ , [ @mailitem_id = ] mailitem_id ] [ OUTPUT ]


 參數
@profile_name = ] 'profile_name'

發送郵件的配置文件的名稱。profile_name 的類型爲 sysname,默認值爲 NULL。profile_name 必須是現有數據庫郵件配置文件的名稱。如果未指定 profile_name,則sp_send_dbmail 使用當前用戶的默認專用配置文件。如果該用戶沒有默認專用配置文件,sp_send_dbmail 會使用 msdb 數據庫的默認公共配置文件。如果用戶沒有默認的專用配置文件,而且數據庫也沒有默認的公共配置文件,則必須指定 @profile_name

@recipients = ] 'recipients'

要向其發送郵件的電子郵件地址列表,以分號分隔。收件人列表的類型爲 varchar(max)。雖然此參數是可選參數,但是必須至少指定 @recipients@copy_recipients 或@blind_copy_recipients 中的一個,否則 sp_send_dbmail 將返回錯誤。

@copy_recipients = ] 'copy_recipients'

要向其抄送郵件的電子郵件地址列表,以分號分隔。抄送件收件人列表的類型爲 varchar(max)。雖然此參數是可選參數,但是必須至少指定 @recipients@copy_recipients或 @blind_copy_recipients 中的一個,否則 sp_send_dbmail 將返回錯誤。

@blind_copy_recipients = ] 'blind_copy_recipients'

要向其密件抄送郵件的電子郵件地址列表,以分號分隔。密件副本收件人列表的類型爲 varchar(max)。雖然此參數是可選參數,但是必須至少指定@recipients@copy_recipients 或 @blind_copy_recipients 中的一個,否則 sp_send_dbmail 將返回錯誤。

@subject = ] 'subject'

電子郵件的主題。主題的類型爲 nvarchar(255)。如果未指定主題,則默認爲“SQL Server 消息”。

@body = ] 'body'

電子郵件的正文。郵件正文的類型爲 nvarchar(max),默認值爲 NULL。

@body_format = ] 'body_format'

郵件正文的格式。該參數的類型爲 varchar(20)默認值爲 NULL。如果已指定,則待發郵件的標頭設置會指示郵件正文具有指定格式。該參數可能包含下列值之一:

  • TEXT
  • HTML

默認爲 TEXT。

@importance = ] 'importance'

郵件的重要性。該參數的類型爲 varchar(6)。該參數可能包含下列值之一:

  • Low
  • Normal
  • High

默認值爲 Normal。

@sensitivity = ] 'sensitivity'

郵件的敏感度。該參數的類型爲 varchar(12)。該參數可能包含下列值之一:

  • Normal
  • Personal
  • Private
  • Confidential

默認值爲 Normal。

@file_attachments = ] 'file_attachments',

電子郵件附件的文件名列表,以分號分隔。必須使用絕對路徑指定列表中的文件。附件列表的類型爲 nvarchar(max)

@query = ] 'query'

要執行的查詢。查詢結果可以作爲文件附加,或包含在電子郵件的正文中。查詢的類型爲 nvarchar(max),並且可以包含任何有效的 Transact-SQL 語句。請注意,查詢在單獨的會話中執行,所以調用 sp_send_dbmail 的腳本中的局部變量不可用於查詢。

@execute_query_database = ] 'execute_query_database'

存儲過程在其中運行查詢的數據庫上下文。該參數的類型爲 sysname,默認爲當前數據庫。只有在指定 @query 時,此參數才適用。

@attach_query_result_as_file = ] attach_query_result_as_file

指定查詢結果集是否作爲附件返回。attach_query_result_as_file 的數據類型爲 bit,默認值爲 0。

如果該值爲 0,則查詢結果包含在電子郵件的正文中,在 @body 參數的內容之後。如果該值爲 1,則結果作爲附件返回。只有在指定 @query 時,此參數才適用。

@query_attachment_filename = ] query_attachment_filename

指定查詢結果集附件使用的文件名。query_attachment_filename 的數據類型爲 nvarchar(255),默認值爲 NULL。如果 attach_query_result 爲 0,則忽略此參數。如果attach_query_result 爲 1 且此參數爲 NULL,則數據庫郵件會創建任意文件名。

@query_result_header = ] query_result_header

指定查詢結果是否包含列標題。query_result_header 值的數據類型爲 bit。如果該值爲 1,則查詢結果包含列標題。如果該值爲 0,則查詢結果不包含列標題。該參數的默認值爲 1。只有在指定 @query 時,此參數才適用。

@query_result_width = ] query_result_width

用於設置查詢結果的格式的線條寬度(字符)。query_result_width 的數據類型爲 int,默認值爲 256。提供的值必須介於 10 和 32767 之間。只有在指定 @query 時,此參數才適用。

@query_result_separator = ] 'query_result_separator'

用於分隔查詢輸出中的列的字符。分隔符的類型爲 char(1)。默認爲“ ”(空格)。

@exclude_query_output = ] exclude_query_output

指定是否使用電子郵件返回查詢執行的輸出。exclude_query_output 的數據類型爲 bit,默認值爲 0。當此參數爲 0 時,sp_send_dbmail 存儲過程的執行將在控制檯上打印作爲查詢執行結果而返回的消息。當此參數爲 1 時,sp_send_dbmail 存儲過程的執行不會在控制檯上打印任何查詢執行消息。

@append_query_error = ] append_query_error

指定是否在 @query 參數指定的查詢返回錯誤時發送電子郵件。append_query_error 的數據類型爲 bit,默認值爲 0。如果此參數的值爲 1,則數據庫郵件會發送電子郵件,並電子郵件的正文中顯示查詢錯誤消息。如果此參數的值爲 0,則數據庫郵件不發送電子郵件,sp_send_dbmail 在結束時會返回代碼 1,指示失敗。

@query_no_truncate = ] query_no_truncate

指定是否使用可避免截斷大型可變長度數據類型(varchar(max)nvarchar(max)varbinary(max)xmltextntextimage 和用戶定義類型)的選項執行查詢。設置該選項後,查詢結果將不包含列標題。query_no_truncate 值的數據類型爲 bit。當該值爲 0 或未指定時,查詢中的列將截斷爲 256 個字符。當該值爲 1 時,不截斷查詢中的列。此參數的默認值爲 0。

注意:
與大量數據一起使用時,@query_no_truncate 選項會佔用其他資源,並可降低服務器的性能。

 

 

@mailitem_id = ] mailitem_id [ OUTPUT ]

可選輸出參數將返回消息的 mailitem_idmailitem_id 的類型爲 int

0(成功)或 1(失敗)

成功時,返回消息“郵件已排隊”。

默認情況下,msdb 數據庫中的 DatabaseMailUser 數據庫角色的所有成員對 sp_send_dbmail 都有執行權限。不過,如果發送郵件的用戶不具有使用該請求的配置文件的權限,sp_send_dbmail 會返回錯誤且不發送該郵件。

A. 發送電子郵件

此示例使用電子郵件地址 [email protected] 向 Dan Wilson 發送電子郵件。該郵件的主題爲 Automated Success Message。郵件正文包含一句話 'The stored procedure finished successfully'

EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'AdventureWorks Administrator',
@recipients = '[email protected]',
@body = 'The stored procedure finished successfully.',
@subject = 'Automated Success Message' ;

B. 發送包含查詢結果的電子郵件

此示例使用電子郵件地址 [email protected] 向 Dan Wilson 發送電子郵件。該郵件的主題爲 Work Order Count,並執行查詢以顯示 DueDate 在 2004 年 4 月 30 日後的兩日內的工單數。數據庫郵件將該結果附加爲文本文件。

EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'AdventureWorks Administrator',
@recipients = '[email protected]',
@query = 'SELECT COUNT(*) FROM AdventureWorks.Production.WorkOrder
WHERE DueDate > ''2004-04-30''
AND  DATEDIFF(dd, ''2004-04-30'', DueDate) < 2' ,
@subject = 'Work Order Count',
@attach_query_result_as_file = 1 ;

A. 發送 HTML 電子郵件

此示例使用電子郵件地址 [email protected] 向 Dan Wilson 發送電子郵件。郵件的主題爲 Work Order List,幷包含一個 HTML 文檔,其中列出 DueDate 在 2004 年 4 月 30 日後的二日內的工單。數據庫郵件使用 HTML 格式發送該郵件。

DECLARE @tableHTML  NVARCHAR(MAX) ;
SET @tableHTML =
N'<H1>Work Order Report</H1>' +
N'<table border="1">' +
N'<tr><th>Work Order ID</th><th>Product ID</th>' +
N'<th>Name</th><th>Order Qty</th><th>Due Date</th>' +
N'<th>Expected Revenue</th></tr>' +
CAST ( ( SELECT td = wo.WorkOrderID,       '',
td = p.ProductID, '',
td = p.Name, '',
td = wo.OrderQty, '',
td = wo.DueDate, '',
td = (p.ListPrice - p.StandardCost) * wo.OrderQty
FROM AdventureWorks.Production.WorkOrder as wo
JOIN AdventureWorks.Production.Product AS p
ON wo.ProductID = p.ProductID
WHERE DueDate > '2004-04-30'
AND DATEDIFF(dd, '2004-04-30', DueDate) < 2
ORDER BY DueDate ASC,
(p.ListPrice - p.StandardCost) * wo.OrderQty DESC
FOR XML PATH('tr'), TYPE
) AS NVARCHAR(MAX) ) +
N'</table>' ;
EXEC msdb.dbo.sp_send_dbmail @recipients='[email protected]',
@subject = 'Work Order List',
@body = @tableHTML,
@body_format = 'HTML' ;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章