sp_add_jobschedule (Transact-SQL)

适用于: SQL Server Azure SQL 托管实例

为SQL Server 代理作业创建计划。

Transact-SQL 语法约定

重要

Azure SQL 托管实例目前支持大多数(但不是所有)SQL Server 代理功能。 有关详细信息,请参阅 Azure SQL 托管实例与 SQL Server 的 T-SQL 区别

语法

sp_add_jobschedule
    [ [ @job_id = ] 'job_id' ]
    [ , [ @job_name = ] N'job_name' ]
    , [ @name = ] N'name'
    [ , [ @enabled = ] enabled ]
    [ , [ @freq_type = ] freq_type ]
    [ , [ @freq_interval = ] freq_interval ]
    [ , [ @freq_subday_type = ] freq_subday_type ]
    [ , [ @freq_subday_interval = ] freq_subday_interval ]
    [ , [ @freq_relative_interval = ] freq_relative_interval ]
    [ , [ @freq_recurrence_factor = ] freq_recurrence_factor ]
    [ , [ @active_start_date = ] active_start_date ]
    [ , [ @active_end_date = ] active_end_date ]
    [ , [ @active_start_time = ] active_start_time ]
    [ , [ @active_end_time = ] active_end_time ]
    [ , [ @schedule_id = ] schedule_id OUTPUT ]
    [ , [ @automatic_post = ] automatic_post ]
    [ , [ @schedule_uid = ] 'schedule_uid' OUTPUT ]
[ ; ]

参数

[ @job_id = ] 'job_id'

添加计划的作业的作业标识号。 @job_id是 uniqueidentifier,默认值为 NULL.

必须指定@job_id@job_name,但不能指定这两者。

[ @job_name = ] N'job_name'

向其中添加计划的作业的名称。 @job_name为 sysname,默认值为 NULL.

必须指定@job_id@job_name,但不能指定这两者。

[ @name = ] N'name'

计划名称。 @name为 sysname,无默认值。

[ @enabled = ] enabled

指示计划的当前状态。 @enabledtinyint,默认值 1 为 (已启用)。 如果 0启用计划,则不会启用该计划。 禁用计划后,不会运行作业。

[ @freq_type = ] freq_type

指示作业执行时间的值。 @freq_type为 int,可以是以下值之一:

说明
1 一次
4 每日
8 每周
16 每月
32 相对于@freq_interval的每月。
64 SQL Server 代理服务启动时运行。
128 在计算机空闲时运行。

[ @freq_interval = ] freq_interval

执行作业的日期。 @freq_intervalint,默认值0为 int,取决于@freq_type的值,如下表所示:

@freq_type的值 @freq_interval的影响
1 (一次) @freq_interval未使用。
4 (每日) @freq_interval 天。
8 (每周) @freq_interval 是以下一个或多个(与逻辑运算符结合使用 OR ):

1 = 星期日
2 = 星期一
4 = 星期二
8 = 星期三
16 = 星期四
32 = 星期五
64 = 星期六
16 (每月) 月@freq_interval 日。
32 (月相对) @freq_interval是以下项之一:

1 = 星期日
2 = 星期一
3 = 星期二
4 = 星期三
5 = 星期四
6 = 星期五
7 = 星期六
8 = 天
9 = 工作日
10 = 周末日期
64(SQL Server 代理服务启动时) @freq_interval未使用。
128 @freq_interval未使用。

[ @freq_subday_type = ] freq_subday_type

指定@freq_subday_interval单位。 @freq_subday_type为 int,可以是以下值之一:

说明(单位)
0x1 在指定的时间
0x2
0x4 分钟
0x8 时数

[ @freq_subday_interval = ] freq_subday_interval

每个作业执行之间要发生的@freq_subday_type周期数。 @freq_subday_interval为 int,默认值为 0.

[ @freq_relative_interval = ] freq_relative_interval

进一步定义@freq_type设置为32(每月相对)时的@freq_interval

@freq_relative_interval为 int,可以是以下值之一:

说明(单位)
1 第一个
2 第二个
4 第三个
8 第四
16 Last

@freq_relative_interval指示间隔的发生。 例如,如果@freq_relative_interval设置为2@freq_type设置为32,并且@freq_interval设置为3,则计划作业将在每月的第二个星期二发生。

[ @freq_recurrence_factor = ] freq_recurrence_factor

作业执行计划之间相隔的周数或月数。 @freq_recurrence_factor为 int,默认值为 0. 仅当@freq_type设置为816@freq_recurrence_factor32时,才使用@freq_recurrence_factor

[ @active_start_date = ] active_start_date

作业执行可以开始的日期。 @active_start_date为 int,默认值为 NULL. 日期的格式为 yyyyMMdd。 如果 设置了@active_start_date ,则日期必须大于或等于 19900101

创建计划后,查看开始日期并确认其为正确的日期。 有关详细信息,请参阅“创建”和“将计划附加到作业”中的“计划开始日期”部分。

[ @active_end_date = ] active_end_date

作业执行可以停止的日期。 @active_end_date为 int,默认值为 99991231. 日期的格式为 yyyyMMdd

[ @active_start_time = ] active_start_time

@active_start_date@active_end_date之间任意一天开始执行作业的时间。 @active_start_time为 int,默认值为 000000. 时间的格式设置为 HHmmss 24 小时制。

[ @active_end_time = ] active_end_time

active_start_date@active_end_date之间任意一天结束作业执行的时间。 @active_end_time为 int,默认值为 235959. 时间的格式设置为 HHmmss 24 小时制。

[ @schedule_id = ] schedule_id OUTPUT

如果成功创建计划,则为其分配的计划标识号。 @schedule_id是 int 类型的 OUTPUT 参数。

[ @automatic_post = ] automatic_post

标识为仅供参考。 不支持。 不保证以后的兼容性。

[ @schedule_uid = ] 'schedule_uid' OUTPUT

计划的唯一标识符。 @schedule_uid是 uniqueidentifier 类型的 OUTPUT 参数。

返回代码值

0(成功)或 1(失败)。

结果集

无。

注解

作业计划现在可以独立于作业进行管理。 若要将计划添加到作业,请使用 sp_add_schedule 创建计划并将 sp_attach_schedule 计划附加到作业。

权限

可以授予 EXECUTE 此过程的权限,但在 SQL Server 升级期间可能会重写这些权限。

其他用户必须被授予数据库中以下SQL Server 代理固定数据库角色msdb之一:

  • SQLAgentUserRole
  • SQLAgentReaderRole
  • SQLAgentOperatorRole

有关这些角色的权限的详细信息,请参阅 SQL Server 代理固定数据库角色

示例

以下示例将作业计划分配到,该计划 SaturdayReports每星期六在凌晨 2:00 执行一次。

EXEC msdb.dbo.sp_add_jobschedule
    @job_name = N'SaturdayReports', -- Job name
    @name = N'Weekly_Sat_2AM', -- Schedule name
    @freq_type = 8, -- Weekly
    @freq_interval = 64, -- Saturday
    @freq_recurrence_factor = 1, -- every week
    @active_start_time = 20000 -- 2:00 AM