sp_add_schedule (Transact-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_name的数据类型为 sysname,无默认值。

  • [ @enabled = ] enabled
    指示计划的当前状态。 enabled的数据类型为 tinyint,默认值为 1(启用)。 如果为 0,则不启用计划。 如果不启用计划,则作业不会按此计划运行。

  • [ @freq_type = ] freq_type
    一个指示作业执行时间的值。 freq_type的数据类型为 int,默认值为 0,而且可以是下列值之一。

    说明

    1

    一次

    4

    每天

    8

    每周

    16

    每月

    32

    每月,相对于 freq_interval

    64

    SQLServerAgent 服务启动时运行

    128

    计算机空闲时运行

  • [ @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_type的数据类型为 int,默认值为 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

    最后一个

  • [ @freq_recurrence_factor = ] freq_recurrence_factor
    作业执行计划之间相隔的周数或月数。 只有 freq_type 为 81632 时才使用 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。

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

    对于每周或每月时间表,如果活动开始日期是在过去,则代理将忽略该日期,改用当前日期。 在使用 sp_add_schedule 创建 SQL 代理计划时,有一个选项可用来指定作为作业执行开始日期的参数 active_start_date。 如果计划类型是每周或每月并且 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_uidOUTPUT
    计划的唯一标识符。 schedule_uid 是类型为 uniqueidentifier 的变量。

  • [ @schedule_id= ] schedule_idOUTPUT
    计划的标识符。 schedule_id 是类型为 int 的变量。

  • [ @originating_server= ] server_name
    标识为仅供参考。不提供支持。不保证以后的兼容性。

返回代码值

0(成功)或 1(失败)

结果集

注释

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

权限

默认情况下,只有 sysadmin 固定服务器角色的成员才可以执行此存储过程。 其他用户必须被授予 msdb 数据库中下列 SQL Server 代理固定数据库角色的权限之一:

  • 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

请参阅

参考

SQL Server 代理存储过程 (Transact-SQL)

sp_add_jobschedule (Transact-SQL)

sp_update_schedule (Transact-SQL)

sp_delete_schedule (Transact-SQL)

sp_help_schedule (Transact-SQL)

sp_attach_schedule (Transact-SQL)

概念

创建计划并将计划附加到作业

安排作业计划

创建计划