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_server 存在于 sp_add_job 中,但不列在参数下。@originating_server 被保留供内部使用。

执行 sp_add_job 添加作业后,可使用 sp_add_jobstep 添加执行该作业活动的步骤。sp_add_jobschedule 可用于创建 SQL Server 代理服务使用的作业执行计划。使用 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 代理固定数据库角色:

  • SQLAgentUserRole

  • SQLAgentReaderRole

  • SQLAgentOperatorRole

有关与上述每个固定数据库角色关联的特定权限的信息,请参阅 SQL Server 代理固定数据库角色

只有 sysadmin 固定服务器角色的成员才可以设置或更改 @owner_login_name 的值。如果非 sysadmin 角色成员的用户设置或更改 @owner_login_name 的值,则无法执行此存储过程,并且会返回错误。

示例

A. 添加作业

此示例将添加一个名为 NightlyBackups 的新作业。

USE msdb ;
GO

EXEC dbo.sp_add_job
    @job_name = N'NightlyBackups' ;
GO

B. 添加一个具有寻呼、电子邮件和网络发送信息的作业

该示例将创建一个名为 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