轉載oriency755 發布于2012-12-04 11:34:45 閱讀數 6870 收藏 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)、xml、text、ntext、image 和用戶定義型別)的選項執行查詢,設定該選項后,查詢結果將不包含列標題,query_no_truncate 值的資料型別為 bit,當該值為 0 或未指定時,查詢中的列將截斷為 256 個字符,當該值為 1 時,不截斷查詢中的列,此引數的默認值為 0,
注意:與大量資料一起使用時,@query_no_truncate 選項會占用其他資源,并可降低服務器的性能,
- [ @mailitem_id = ] mailitem_id [ OUTPUT ]
-
可選輸出引數將回傳訊息的 mailitem_id,mailitem_id 的型別為 int,
0(成功)或 1(失敗)
結果集成功時,回傳訊息“郵件已排隊”,
備注使用前,必須使用資料庫郵件配置向導、SQL Server 外圍應用配置器工具或 sp_configure 啟用資料庫郵件,
sysmail_stop_sp 通過停止外部程式使用的 Service Broker 物件來停止資料庫郵件,使用 sysmail_stop_sp 停止資料庫郵件后,sp_send_dbmail 仍會接受郵件,若要啟動資料庫郵件,請使用sysmail_start_sp,
如果未指定 @profile,則 sp_send_dbmail 使用默認組態檔,如果發送電子郵件的用戶具有默認專用組態檔,則資料庫郵件使用該組態檔,如果該用戶沒有默認的專用組態檔,則sp_send_dbmail 將使用默認的公共組態檔,如果用戶沒有默認的專用組態檔和默認的公共組態檔,則 sp_send_dbmail 將回傳錯誤,
sp_send_dbmail 不支持沒有任何內容的電子郵件,若要發送電子郵件,至少必須指定 @body、@query、@file_attachments 或@subject 之一,否則,sp_send_dbmail 會回傳錯誤,
資料庫郵件使用當前用戶的 Microsoft Windows 安全背景關系控制對檔案的訪問,因此,經過 SQL Server 身份驗證的用戶無法使用 @file_attachments 附加檔案,Windows 不允許 SQL Server 從一臺遠程計算機向另一臺遠程計算機提供憑據,所以,如果從運行 SQL Server 的計算機以外的計算機運行該命令,則資料庫郵件可能無法從網路共享附加檔案,
如果已同時指定 @query 和 @file_attachments 且未找到檔案,則查詢仍然會執行,但是不會發送電子郵件,
指定查詢后,結果集的格式被設定為行內文本,使用十六進制格式發送結果中的二進制資料,
引數 @recipients、@copy_recipients 和 @blind_copy_recipients 是以分號分隔的電子郵件地址串列,至少必須提供以上引數之一,否則sp_send_dbmail 會回傳錯誤,
在沒有事務背景關系的情況下執行 sp_send_dbmail 時,資料庫郵件將啟動并提交隱式事務,從現有事務內執行 sp_send_dbmail 時,資料庫郵件將依賴用戶提交或回滾任何更改,它不會啟動內部事務,
權限默認情況下,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.WorkOrderWHERE 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.OrderQtyFROM AdventureWorks.Production.WorkOrder as woJOIN AdventureWorks.Production.Product AS pON wo.ProductID = p.ProductIDWHERE DueDate > '2004-04-30'AND DATEDIFF(dd, '2004-04-30', DueDate) < 2ORDER BY DueDate ASC,(p.ListPrice - p.StandardCost) * wo.OrderQty DESCFOR 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' ;
文章轉自:http://hi.baidu.com/hewengao401/item/3fbac843a3e00a9a823ae1c5
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/18471.html
標籤:SQL Server
上一篇:sql server 發送郵件
