sp_add_job (Transact-SQL)
加入 SQLServerAgent 服務所執行的新作業。
語法
sp_add_job [ @job_name = ] 'job_name'
[ , [ @enabled = ] enabled ]
[ , [ @description = ] 'description' ]
[ , [ @start_step_id = ] step_id ]
[ , [ @category_name = ] 'category' ]
[ , [ @category_id = ] category_id ]
[ , [ @owner_login_name = ] 'login' ]
[ , [ @notify_level_eventlog = ] eventlog_level ]
[ , [ @notify_level_email = ] email_level ]
[ , [ @notify_level_netsend = ] netsend_level ]
[ , [ @notify_level_page = ] page_level ]
[ , [ @notify_email_operator_name = ] 'email_name' ]
[ , [ @notify_netsend_operator_name = ] 'netsend_name' ]
[ , [ @notify_page_operator_name = ] 'page_name' ]
[ , [ @delete_level = ] delete_level ]
[ , [ @job_id = ] job_id OUTPUT ]
引數
[@job_name = ] 'job_name'
作業的名稱。這個名稱必須是唯一的,且不能包含百分比 (%) 字元。job_name 是 nvarchar(128),沒有預設值。[@enabled = ] enabled
指出所加入作業的狀態。enabled 是 tinyint,預設值是 1 (已啟用)。如果是 0,就不會啟用作業,也不會根據作業的排程來執行作業;不過,您可以手動執行它。[@description = ] 'description'
作業的描述。description 是 nvarchar(512),預設值是 NULL。如果省略 description,就會使用「沒有可用的描述」。[@start_step_id = ] step_id
這是作業要執行之第一個步驟的識別碼。step_id 是 int,預設值是 1。[@category_name = ] 'category'
作業的類別目錄。category 是 sysname,預設值是 NULL。[@category_id = ] category_id
用來指定作業類別目錄之不限特定語言的機制。category_id 是 int,預設值是 NULL。[@owner_login_name = ] 'login'
擁有作業的登入名稱。login 是 sysname,預設值是 NULL,它是解譯為目前的登入名稱。只有系統管理員 (sysadmin) 固定伺服器角色的成員,才能夠設定或變更 @owner_login_name 的值。如果不是系統管理員 (sysadmin) 角色成員的使用者設定或變更 @owner_login_name 的值,則此預存程序的執行會失敗,並傳回錯誤。[@notify_level_eventlog = ] eventlog_level
這個值表示針對這項作業,何時將項目放在 Microsoft Windows 應用程式記錄中。eventlog_level 是 int,它可以是下列值之一。值
描述
0
永不
1
成功時
2 (預設值)
失敗時
3
永遠
[@notify_level_email = ] email_level
這個值表示在這項作業完成時,何時傳送電子郵件。email_level 是 int,預設值是 0,表示永不傳送。email_level 使用與 eventlog_level 相同的值。[@notify_level_netsend = ] netsend_level
這個值表示在這項作業完成時,何時傳送網路訊息。netsend_level 是 int,預設值是 0,表示永不傳送。netsend_level 使用與 eventlog_level 相同的值。[@notify_level_page = ] page_level
這個值表示在這項作業完成時,何時傳送頁面。page_level 是 int,預設值是 0,表示永不傳送。page_level使用與 eventlog_level 相同的值。[@notify_email_operator_name = ] 'email_name'
當到達 email_level 時,電子郵件所要送往之人員的電子郵件名稱。email_name 是 sysname,預設值是 NULL。[@notify_netsend_operator_name = ] 'netsend_name'
這項作業完成時,網路訊息所要送往的操作員名稱。netsend_name 是 sysname,預設值是 NULL。[@notify_page_operator_name = ] 'page_name'
這項作業完成時,所要呼叫的人員名稱。page_name 是 sysname,預設值是 NULL。[@delete_level = ] delete_level
這是指出何時要刪除作業的值。delete_value 是 int,預設值是 0,表示永不刪除。delete_level 使用與 eventlog_level 相同的值。[!附註]
當 delete_level 是 3 時,作業只會執行一次,不論作業是否定義了任何排程,都是如此。此外,如果作業刪除作業本身,也會同時刪除作業的所有記錄。
[@job_id = ] job_idOUTPUT
作業建立成功時,指派給作業的作業識別碼。job_id 是 uniqueidentifier 類型的輸出變數,預設值是 NULL。
傳回碼值
0 (成功) 或 1 (失敗)
結果集
無
備註
@originating_server 在 sp_add_job, 中,但並未列在「引數」之下。保留 @originating_server,供內部使用。
在執行 sp_add_job 來加入作業之後,您可以利用 sp_add_jobstep 來加入執行作業活動的步驟。您可以利用 sp_add_jobschedule 來建立 SQL Server Agent 服務用來執行作業的排程。請利用 sp_add_jobserver 來設定執行作業的 SQL Server 執行個體,利用 sp_delete_jobserver 來移除 SQL Server 執行個體中的作業。
如果作業將在多伺服器環境中執行一或多部目標伺服器,請利用 sp_apply_job_to_targets 來設定作業的目標伺服器或目標伺服器群組。若要從目標伺服器或目標伺服器群組中移除作業,請使用 sp_remove_job_from_targets。
SQL Server Management Studio 提供了一種簡單的圖形方式供您管理各項作業,建議您利用這個方式來建立和管理作業基礎結構。
權限
若要執行這個預存程序,使用者必須是系統管理員 (sysadmin) 固定伺服器角色的成員,或被授與 msdb 資料庫的下列其中一個 SQL Server Agent 固定資料庫角色。
SQLAgentUserRole
SQLAgentReaderRole
SQLAgentOperatorRole
如需有關與每一個固定資料庫角色相關聯的特定權限資訊,請參閱<SQL Server Agent 固定資料庫角色>。
只有系統管理員 (sysadmin) 固定伺服器角色的成員,才能夠設定或變更 @owner_login_name 的值。如果不是系統管理員 (sysadmin) 角色成員的使用者設定或變更 @owner_login_name 的值,則此預存程序的執行會失敗,並傳回錯誤。
範例
A. 加入作業
這個範例會加入名稱為 NightlyBackups 的新作業。
USE msdb ;
GO
EXEC dbo.sp_add_job
@job_name = N'NightlyBackups' ;
GO
B. 利用呼叫器、電子郵件和 net send 資訊來加入作業
這個範例會建立一項名稱為 Ad hoc Sales Data Backup 的作業,以便在作業失敗時通知 François Ajenstat (利用呼叫器、電子郵件或網路快顯訊息),以及在順利完成刪除作業。
[!附註]
這個範例假設名稱為 François Ajenstat 的操作員及名稱為 françoisa 的登入已經存在。
USE msdb ;
GO
EXEC dbo.sp_add_job
@job_name = N'Ad hoc Sales Data Backup',
@enabled = 1,
@description = N'Ad hoc backup of sales data',
@owner_login_name = N'françoisa',
@notify_level_eventlog = 2,
@notify_level_email = 2,
@notify_level_netsend = 2,
@notify_level_page = 2,
@notify_email_operator_name = N'François Ajenstat',
@notify_netsend_operator_name = N'François Ajenstat',
@notify_page_operator_name = N'François Ajenstat',
@delete_level = 1 ;
GO
請參閱