共用方式為


sp_add_job (Transact-SQL)

加入 SQLServerAgent 服務所執行的新作業。

主題連結圖示Transact-SQL 語法慣例

語法

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_serversp_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