Поделиться через


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 (текущая учетная запись). Задавать или изменять значения переменной @owner_login_name могут только члены предопределенной роли сервера sysadmin. Если доступ к аргументу @owner_login_name пытаются получить пользователи, не являющиеся членами роли sysadmin, хранимая процедура завершится с ошибкой.

  • [ @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 или одной из следующих предопределенных ролей базы данных агента SQL Server, расположенных в базе данных msdb.

  • SQLAgentUserRole

  • SQLAgentReaderRole

  • SQLAgentOperatorRole

Дополнительные сведения о конкретных разрешениях, связанных с каждой из этих предопределенных ролей базы данных, см. в разделе Предопределенные роли базы данных агента SQL Server.

Установка или изменение значения аргумента @owner_login_name доступны только членам предопределенной роли сервера sysadmin. В том случае, если к аргументу @owner_login_name попытаются получить доступ пользователи, не являющиеся членами роли sysadmin, процедура завершится с ошибкой.

Примеры

А. Создание задания

В этом примере создается новое задание с именем NightlyBackups.

USE msdb ;
GO

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

Б. Создание задания с уведомлением по пейджеру, электронной почте и по сети

Этот пример иллюстрирует создание задания Ad hoc Sales Data Backup, в случае сбоя которого пользователь Francois Ajenstat получает уведомление (по пейджеру, электронной почте или с помощью сетевого всплывающего сообщения); в случае успешного завершения задания выполняется его удаление.

ПримечаниеПримечание

В данном примере предполагается, что оператор с именем Francois Ajenstat и имя входа francoisa уже существуют.

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