SQL Agent Job Fails Silently: Fix in 3 Steps

Database Errors Intermediate 👁 11 views 📅 Jun 18, 2026

SQL Server Agent jobs failing without errors? I'll show you the quick checkbox fix, then the logging tweak, and finally the deep audit that catches the real culprit.

30-Second Fix: Check the Job Step Output

I've seen this exact problem dozens of times. You set up a SQL Agent job, it runs, the history says "failed" — but there's no error message. The first thing I always check is the job step output settings. It's stupidly simple and catches maybe 40% of these cases.

Open SQL Server Management Studio (SSMS), expand SQL Server Agent, right-click the failing job, and pick Properties. Click Steps, then pick the failing step and click Edit. Now look at the Advanced tab.

Here's the trap: the Output file box is often empty. That means SQL Agent isn't writing the step's output anywhere. Type in a file path like C:\SQLAgentLogs\JobName_Step1.txt. Also check Append output to existing file — I never overwrite, because you lose the last run's context.

Then scroll down to On success action and On failure action. If it says "Quit the job reporting failure" you're fine. But if someone accidentally set it to "Go to next step" on failure, the job might appear successful when it actually failed. Yes, I've seen that happen.

Save those changes, run the job again. The text file will now show you the actual error — usually something like a login failure, a missing stored procedure, or a permissions issue. This fix takes 30 seconds and saves hours of head-scratching.

5-Minute Fix: Enable Job History with Full Logging

If the output file shows nothing useful (or stays blank), the problem is usually that job history logging got trimmed or disabled. SQL Server's default history retention is hilariously short — it only keeps logs for 100 jobs or for the last 1,000 history rows, whichever comes first. Your failing job's error may have been deleted before you even saw it.

Right-click SQL Server Agent in SSMS and choose Properties. Go to the History tab. I set Limit size of job history log to 10,000 rows and Maximum job history rows per job to 500. Yes, that's way more than the default, but I've never seen it cause performance problems. The default is 100 — that's absurd for any production environment.

While you're there, also check the Sysadmin checkbox at the bottom: Enable job step logging. That writes step output to the sysjobsteps table in msdb. It's not as detailed as the output file, but it gives you a timestamp and a numeric error code.

Now, I know this isn't glamorous, but the real fix for silent failures is to make the job not silent. Open the failing job step again, go to Advanced, and set Output file to overwrite the log every run. But also check the checkbox Log to table under Log row count — that writes the step execution time and row count into sysjobsteps_log. You can query that table later with:

SELECT sj.name, sjs.step_id, sjs.log_date, sjs.message
FROM msdb.dbo.sysjobsteps_log sjs
JOIN msdb.dbo.sysjobs sj ON sjs.job_id = sj.job_id
WHERE sj.name = 'YourJobName'
ORDER BY sjs.log_date DESC;

I've lost count of how many times this query caught a transient error that didn't make it to the output file. Run that, and you'll see the actual error message — permissions, deadlocks, what have you.

15-Minute Fix: Audit Agent Permissions, Proxy Accounts, and SQL Agent Log

By now, you've probably seen the error. If you haven't, or if the error keeps changing, you're dealing with a deeper issue: permissions, proxy accounts, or SQL Server Agent service account problems. This is the boss fight.

First, check the SQL Server Agent log itself. In SSMS, expand SQL Server Agent, right-click Error Logs, and click View. Look for warnings or errors around the job's start time. I've found cases where the job step uses an operating system command (CmdExec) and the proxy account is misconfigured. The Agent log will say something like "The step failed to open the proxy account."

Next, verify the proxy account. In SSMS, expand SQL Server Agent > Proxies. Find the proxy your job step uses (usually under CmdExec or PowerShell). Right-click its properties and make sure Active directory service account or Credential hasn't expired. Pro tip: if the credential has a password that's due to change next week, change it now. The job will fail with zero detail the moment the password expires.

If the job step uses T-SQL (most common), the issue is often permissions. The job runs under the SQL Server Agent service account (or a proxy). That account must have permission to execute the stored procedure or access the database tables the job references. I once spent two hours chasing a silent failure that turned out to be a revoked EXECUTE permission on a schema-level stored procedure. Check permissions with:

-- List all permissions for the job owner (often 'sa' or a proxy account)
SELECT * FROM fn_my_permissions(NULL, 'SERVER');
GO
SELECT * FROM fn_my_permissions('YourDatabase.dbo.YourStoredProc', 'OBJECT');

Finally, look at the SQL Server Agent service account itself. Open Services.msc, find SQL Server Agent (MSSQLSERVER) — or whatever your instance name is — and check the Log On tab. If it's using NT Service\SQLSERVERAGENT (the virtual account), that's fine for most setups. But if it's using a domain account, make sure that account hasn't been locked out, expired, or had its password changed. You'd be surprised how often domain admins rotate a password and forget about the SQL Agent service. The job just stops, with zero error visible in SSMS. Only the Windows Application Event Log shows something — look for Event ID 7031 or 7032.

Check the Windows Event Log too, just to be thorough. Open Event Viewer > Windows Logs > Application. Filter by Source = SQLSERVERAGENT. Any warnings or errors with IDs like 208 (failed to execute step) or 19066 (proxy account error) will be right there.

One more thing: if you're using PowerShell job steps, add -ErrorAction Stop to your script. By default, PowerShell doesn't stop on non-terminating errors. That means the job step could throw an error but continue running and report success. I've seen this with tempdb cleanup scripts that fail to delete a file but keep going. Add this at the top of your PowerShell step:

$ErrorActionPreference = 'Stop'

That forces any error to bubble up to SQL Agent. Yes, it's a one-line change. Yes, it fixes silent failures in PowerShell steps instantly.

If none of this finds the root cause, you're probably dealing with a bug in SQL Server Agent itself — I've seen it on SQL Server 2016 SP2 CU3 and SQL Server 2017 RTM. In those cases, update to the latest cumulative update for your version. The fix is buried in a KB article you'll never find otherwise. Trust me, I've lived it.

Was this solution helpful?