sp_add_schedule (Transact-SQL)

适用于:SQL ServerAzure SQL 托管实例

创建一个可由任意数量的作业使用的计划。

Transact-SQL 语法约定

语法

sp_add_schedule
    [ @schedule_name = ] 'schedule_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 ]
    [ , [ @owner_login_name = ] 'owner_login_name' ]
    [ , [ @schedule_uid = ] schedule_uid OUTPUT ]
    [ , [ @schedule_id = ] schedule_id OUTPUT ]
    [ , [ @originating_server = ] server_name ] /* internal */
[ ; ]

参数

[ @schedule_name = ] 'schedule_name'

计划的名称。 @schedule_namesysname,无默认值。

[ @enabled = ] enabled

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

[ @freq_type = ] freq_type

一个指示作业执行时间的值。 @freq_type为 int,默认值0为 ,可以是这些值之一。

说明
1 一次
4 每日
8 每周
16 每月
32 相对于 @freq_interval的每月
64 SQL Server 代理服务启动时运行
128 在计算机空闲时运行(Azure SQL 托管实例不支持

[ @freq_interval = ] @freq_interval

作业执行的天数。 @freq_interval为 int,默认值1为 ,取决于@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 (SQLServerAgent 服务启动时) @freq_interval未使用。
128 @freq_interval未使用。

[ @freq_subday_type = ] freq_subday_type

指定@freq_subday_interval单位。 @freq_subday_typeint,默认值 0为 ,可以是这些值之一。

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

[ @freq_subday_interval = ] freq_subday_interval

每个作业执行之间要发生的@freq_subday_type周期数@freq_subday_interval为 int,默认值为 0. 间隔长度必须至少为 10 秒。 在@freq_subday_type等于1的情况下,将忽略@freq_subday_interval

[ @freq_relative_interval = ] freq_relative_interval

如果@freq_interval为 32(每月相对),则每个月@freq_interval出现作业。 @freq_relative_interval是 int,默认值0为 ,可以是这些值之一。 在@freq_type不等于 32 的情况下,将忽略@freq_relative_interval

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

[ @freq_recurrence_factor = ] freq_recurrence_factor

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

[ @active_start_date = ] active_start_date

作业执行开始的日期。 @active_start_date为 int,默认值NULL为 ,表示今天的日期。 日期的格式为 yyyyMMdd。 如果 @active_start_date 不为 NULL,则日期必须大于或等于19900101。

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

对于每周或每月计划,如果@active_start_date过去,代理将忽略,而是使用当前日期。 使用sp_add_schedule选项指定参数@active_start_date即作业执行开始的日期时,创建SQL Server 代理计划。 如果计划类型为每周或每月,并且 @active_start_date 参数设置为过去日期,则 忽略@active_start_date 参数,并且当前日期用于 @active_start_date

[ @active_end_date = ] active_end_date

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

[ @active_start_time = ] active_start_time

@active_start_date@active_end_date之间任意一天开始执行作业的时间。 @active_start_time为 int,默认值000000为 :24 小时制表示上午 12:00:00,必须使用窗体HHmmss输入。

[ @active_end_time = ] active_end_time

@active_start_date@active_end_date之间任何一天结束作业执行的时间。 @active_end_time为 int,默认值235959为 :24 小时制表示下午 11:59:59,并且必须使用表单HHmmss输入。

[ @owner_login_name = ] 'owner_login_name'

拥有该计划的服务器主体的名称。 @owner_login_name为 sysname,默认值NULL为 ,指示计划由创建者拥有。

[ @schedule_uid = ] schedule_uid OUTPUT

计划的唯一标识符。 @schedule_uid是 uniqueidentifier 类型的变量。

[ @schedule_id = ] schedule_id OUTPUT

计划的标识符。 @schedule_id是 int 类型的变量。

[ @originating_server = ] server_name

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

返回代码值

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

结果集

无。

注解

SQL Server Management Studio 为管理作业提供了一种图形化的简便方法,建议使用此方法来创建和管理作业基础结构。

权限

此存储过程由 db_owner 角色拥有。 你可以为任何用户授予 EXECUTE 权限,但这些权限可能会在 SQL Server 升级期间被重写。

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

  • SQLAgentUserRole
  • SQLAgentReaderRole
  • SQLAgentOperatorRole

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

示例

A. 创建计划

以下示例将创建一个名为 RunOnce 的计划: 此计划在创建当天的 23:30 运行一次。

USE msdb;
GO

EXEC dbo.sp_add_schedule
    @schedule_name = N'RunOnce',
    @freq_type = 1,
    @active_start_time = 233000;
GO

B. 创建计划,将计划附加到多个作业

以下示例将创建一个名为 NightlyJobs 的计划: 使用此计划的作业每天在服务器上的时间为 01:00 时执行。 该示例将计划附加到作业 BackupDatabase 和作业 RunReports

注意

此示例假定作业 BackupDatabase 和作业 RunReports 已存在。

USE msdb;
GO

EXEC sp_add_schedule
    @schedule_name = N'NightlyJobs',
    @freq_type = 4,
    @freq_interval = 1,
    @active_start_time = 010000;
GO

EXEC sp_attach_schedule
    @job_name = N'BackupDatabase',
    @schedule_name = N'NightlyJobs';
GO

EXEC sp_attach_schedule
    @job_name = N'RunReports',
    @schedule_name = N'NightlyJobs';
GO