MSSQL Error 14262: The specified @job_name does not exist
- Ошибка выполнения хранимых процедур управления агентом:
Msg 14262, Level 16, State 1: The specified @job_name ('%ls') does not exist. - Скрипты автоматического развертывания баз 1С падают на этапе создания шагов задания (
sp_add_jobstep). - Сторонние утилиты бэкапа и обслуживания не могут инициировать запуск регламентных задач.
1. Проверка наличия задания в таблицах msdb
USE msdb;
GO
IF NOT EXISTS (SELECT 1 FROM msdb.dbo.sysjobs WHERE name = N'1C_Full_Backup')
BEGIN
PRINT 'Job does not exist. Creating...';
END2. Правильный паттерн создания задания и добавления шагов
Для предотвращения ошибки 14262 используйте выходную переменную @job_id:
DECLARE @JobID UNIQUEIDENTIFIER;
-- 1. Создание задания с возвратом GUID
EXEC msdb.dbo.sp_add_job
@job_name = N'1C_Index_Defrag',
@enabled = 1,
@job_id = @JobID OUTPUT;
-- 2. Добавление шага по ID вместо имени
EXEC msdb.dbo.sp_add_jobstep
@job_id = @JobID,
@step_name = N'Execute Defrag',
@subsystem = N'TSQL',
@command = N'EXEC sp_updatestats;',
@retry_attempts = 3,
@retry_interval = 5;
-- 3. Привязка к локальному серверу
EXEC msdb.dbo.sp_add_jobserver @job_id = @JobID, @server_name = N'(local)';3. Проверка контекста базы данных
Убедитесь, что вызов процедур управления агентом выполняется в контексте базы msdb:
USE msdb; -- Обязательно перед вызовом sp_delete_job / sp_start_job Частые вопросы (FAQ)
Почему при выполнении скрипта создания задания возникает ошибка 14262?
Скрипт пытается вызвать sp_add_jobstep или sp_add_jobserver по параметру @job_name до того, как транзакция создания родительского задания через sp_add_job была зафиксирована.
Как проверить точное имя задания без учета проблем с пробелами?
Выполните запрос: SELECT job_id, '[' + name + ']' FROM msdb.dbo.sysjobs. Квадратные скобки позволят увидеть случайные начальные или конечные пробелы.
Может ли ошибка возникать из-за прав учетной записи?
Да. Если учетная запись не является sysadmin, она видит только те задания в msdb, владельцем (owner) которых является ее собственный login.
Как сменить владельца задания на sa?
Выполните: EXEC msdb.dbo.sp_update_job @job_name = N'YourJobName', @owner_login_name = N'sa'.