sp_add_job (Transact-SQL)

适用于: 是SQL Server(所有支持的版本) 是Azure SQL 托管实例

添加 SQL 代理服务执行的新作业。

主题链接图标 Transact-SQL 语法约定

重要

Azure SQL 托管实例目前支持大多数(但不是所有)SQL Server 代理功能。 有关详细信息,请参阅 Azure SQL 托管实例与 SQL Server 的 T-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_namenvarchar (128),无默认值。

[ @enabled = ] enabled 指示添加的作业的状态。 enabledtinyint,默认值为 1 (启用) 。 如果为 0,则不启用作业,并且该作业不会根据其计划运行。但是,可以手动运行它。

[ @description = ] 'description' 作业的说明。 描述nvarchar (512),默认值为 NULL。 如果省略 说明 ,则使用 "无可用说明"。

[ @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_levelint,可以是下列值之一。

Value 说明
0 从不
1 成功时
2 (默认值) 失败时
3 Always

[ @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_level3 时,仅执行一次作业,而不考虑为作业定义的任何计划。 而且,如果作业将自身删除,则将同时删除该作业的历史记录。

[ @job_id = ] _job_idOUTPUT 如果成功创建,则分配给作业的作业标识号。 job_iduniqueidentifier 类型的输出变量,默认值为 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 固定服务器角色的成员,或者被授予以下 SQL Server 代理固定数据库角色之一,这些角色驻留在 msdb 数据库中:

  • 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  

另请参阅

sp_add_schedule (Transact-sql)
sp_add_jobstep (Transact-sql)
sp_add_jobserver (Transact-sql)
sp_apply_job_to_targets (Transact-sql)
sp_delete_job (Transact-sql)
sp_delete_jobserver (Transact-sql)
sp_remove_job_from_targets (Transact-sql)
sp_help_job (Transact-sql)
sp_help_jobstep (Transact-sql)
sp_update_job (Transact-sql)
系统存储过程 (Transact-SQL)