- Error number
- 14262
- Severity
- 16 (user-correctable error)
- State
- 1
- Product
- Microsoft SQL Server Database Engine
- Versions
- SQL Server editions that include SQL Server Agent (2016 to 2025), Azure SQL Managed Instance
- Category
- SQL Server Agent
- Last reviewed
- 24 October 2026
On this page
What it means
Error 14262 means an msdb procedure was given a job, schedule or other Agent object name (or id) that does not exist in msdb on the server you are connected to.
Agent procedures in msdb (sp_start_job, sp_update_job, sp_delete_job, sp_add_jobstep and others) first resolve the name or id you pass through helper procedures such as sp_verify_job_identifiers. If nothing matches, they raise 14262 and do nothing else. That is why the message names the helper procedure rather than the one you called.
Read the two parts in the message: the first is the parameter that failed (@job_name, @job_id, @schedule_name and so on), the second is the exact value that was passed, so typos, extra spaces and placeholder values are visible right there. 14262 is checked before SQL Server Agent is contacted, so you get it even when Agent is stopped; for a job that exists while Agent is stopped you get error 22022 instead.
Common causes
- A typo, different spelling or extra space in the job name, or the display name in SSMS differs from the real name.
- The script runs on a different server than the job lives on (a failover partner, another environment or another instance).
- The job was renamed, deleted or not yet created, for example in a deployment that runs steps in the wrong order.
- A
@job_idcopied from another server: job ids are generated per server, so the same job has a different id elsewhere. - The name of another object is wrong: a schedule, operator or step name passed to the matching procedure.
Diagnose it
Read-only These queries only read metadata and dynamic management views. They do not change data, permissions or configuration, so they are safe to run first.
Find jobs with a similar name
SELECT job_id, name, enabled, DATALENGTH(name) / 2 AS name_length, date_modified
FROM msdb.dbo.sysjobs
WHERE name LIKE N'%ETL%'
ORDER BY name; Replace ETL with part of the name from the message. Compare the spelling and name_length with what the script passes: a longer length than the visible text means leading or trailing spaces.
Which server am I connected to?
SELECT @@SERVERNAME AS server_name, SERVERPROPERTY('ServerName') AS instance_name; Jobs live in msdb of one instance. If this is not the server where the job was created, connect to the right one.
Find schedules by name
SELECT schedule_id, name, enabled, date_modified
FROM msdb.dbo.sysschedules
WHERE name LIKE N'%Nightly%'
ORDER BY name; For the @schedule_name form. Several schedules can share a name; then pass @schedule_id instead.
How to fix it
Each fix is labelled with what it changes. Try read-only checks and the least invasive fix first, and test changes outside production.
Use the exact name, or the job id from this server
Client or network sideCopy the name from msdb.dbo.sysjobs on the target server, or look up the id there and pass @job_id, which is not affected by renames.
DECLARE @id uniqueidentifier =
(SELECT job_id FROM msdb.dbo.sysjobs WHERE name = N'Nightly ETL');
IF @id IS NULL
THROW 50001, N'Job Nightly ETL does not exist on this server.', 1;
EXEC msdb.dbo.sp_start_job @job_id = @id;
Make deployment scripts check before they act
Client or network sideScripts that update or delete jobs should test whether the job exists first, so a rerun or a partial deployment does not fail with 14262.
IF EXISTS (SELECT 1 FROM msdb.dbo.sysjobs WHERE name = N'Nightly ETL')
EXEC msdb.dbo.sp_delete_job @job_name = N'Nightly ETL';
Create the job on this server
Changes configurationIf the job is genuinely missing (a new server or a failover partner), script it from the server where it exists (SSMS: right-click the job, Script Job as, CREATE To) and run the script here.
Examples
Starting a job that does not exist
EXEC msdb.dbo.sp_start_job @job_name = N'Nightly ETL';
Msg 14262, Level 16, State 1, Procedure sp_verify_job_identifiers, Line 67
The specified @job_name ('Nightly ETL') does not exist.
Reproduced on SQL Server 2025 (17.0.1145.4), 23 October 2026.
Deleting a schedule by a name that does not exist
EXEC msdb.dbo.sp_delete_schedule @schedule_name = N'Nightly';
Msg 14262, Level 16, State 1, Procedure msdb.dbo.sp_verify_schedule_identifiers, Line 138
The specified @schedule_name ('Nightly') does not exist.
Reproduced on SQL Server 2025 (17.0.1145.4), 23 October 2026.
How to prevent it
Keep job definitions in source control and deploy them with idempotent scripts that check msdb.dbo.sysjobs before creating, updating or deleting. When jobs must exist on several servers (failover partners, availability group replicas), deploy them to every server and compare the job lists regularly.
Common questions
The job is visible in SSMS, why does sp_start_job still say it does not exist?
Usually the name differs slightly (a trailing space or a different character), or the query window is connected to another server or instance than Object Explorer. Check the name length and @@SERVERNAME.
Is 14262 related to SQL Server Agent being stopped?
No. The existence check runs before Agent is contacted. On a server with Agent stopped, a missing job still gives 14262; an existing job gives 22022.
Why does the message name sp_verify_job_identifiers?
The job procedures call this helper to turn the name or id into a job. The error is raised inside it, so the header shows the helper, not the procedure you called.
Learn more on CodeWithSQL
Official documentation
Last technically reviewed 24 October 2026; examples and diagnostics run on SQL Server 2025 (17.0.1145.4). Message text checked against the engine's sys.messages catalogue.