I den här artikeln presenterar jag tre alternativ för att returnera stegen för ett SQL Server Agent-jobb när du använder T-SQL.
Alternativen
Du kan använda följande T-SQL-alternativ för att returnera stegen för ett SQL Server Agent-jobb:
- Alternativ 1 :Kör
sp_help_job
lagrad procedur. - Alternativ 2 :Utför
sp_help_jobstep
lagrad procedur. - Alternativ 3 :Fråga
sysjobsteps
tabellen (och anslut den medsysjobs_view
om så krävs).
Alla dessa alternativ finns i msdb databasen och måste därför köras i den databasen. Du kan göra det genom att byta till msdb databas först, eller genom att kvalificera objektet på lämpligt sätt (t.ex. msdb.dbo.sysjobsteps
).
Alternativ 1:sp_help_job
När du ringer sp_help_job
utan några argument returnerar den helt enkelt en lista med jobb. Men när du skickar ett jobbs namn eller ID listar det detaljerna för jobbet, inklusive dess steg.
Här är ett exempel:
EXEC sp_help_job
@job_name = 'SqlAgentTest';
Resultat:
Detta listar jobbet, såväl som alla jobbsteg, scheman och målservrar.
Här är ett exempel på koden när du använder ID:t:
EXEC sp_help_job
@job_id = '343D9F2A-070A-4367-BF69-4248FFF57D70';
När du använder ID:t kan du utelämna parameternamnet om du vill.
Exempel:
EXEC sp_help_job '343D9F2A-070A-4367-BF69-4248FFF57D70';
Syntax
Den fullständiga syntaxen för sp_help_job
går så här:
sp_help_job { [ @job_id = ] job_id
[ @job_name = ] 'job_name' }
[ , [ @job_aspect = ] 'job_aspect' ]
[ , [ @job_type = ] 'job_type' ]
[ , [ @owner_login_name = ] 'login_name' ]
[ , [ @subsystem = ] 'subsystem' ]
[ , [ @category_name = ] 'category' ]
[ , [ @enabled = ] enabled ]
[ , [ @execution_status = ] status ]
[ , [ @date_comparator = ] 'date_comparison' ]
[ , [ @date_created = ] date_created ]
[ , [ @date_last_modified = ] date_modified ]
[ , [ @description = ] 'description_pattern' ]
Se Microsofts dokumentation för sp_help_job
för en förklaring av varje parameter, såväl som de värden som var och en accepterar.
Alternativ 2:sp_help_jobstep
sp_help_jobstep
lagrad procedur är utformad specifikt för att återställa stegen i ett jobb. Men det är allt det ger tillbaka.
Så om du inte vill se något av schemat och målservergrejer, etc, kan det här vara vad du letar efter.
Du kan skicka sp_help_jobstep
jobbnamnet eller dess ID (men inte båda).
Här är ett exempel:
EXEC sp_help_jobstep
@job_name = 'SqlAgentTest';
Och så här ser resultatet ut på ett tvåstegsjobb:
Du kan också ange ett steg-ID om du bara vill att ett specifikt steg ska returneras. Du måste dock ange vilket jobb det är för (antingen med dess ID eller namn).
Här är ett exempel på hur du anger det andra steget i jobbet:
EXEC sp_help_jobstep
@job_name = 'SqlAgentTest',
@step_id = 2;
Steg-ID:t måste faktiskt finnas för det jobbet. Till exempel, ange ett steg-ID för 3
för jobbet ovan resulterar i ett fel.
Alternativ 3:sysjobsteps
Tabell
Ett annat alternativ är att köra en fråga mot sysjobsteps
tabell.
Den här tabellen innehåller stegen för alla jobb, så om du bara vill ha stegen för ett specifikt jobb måste du skicka jobb-ID:t.
Här är ett exempel på hur du frågar efter sysjobsteps
tabell för stegen för ett specifikt jobb:
SELECT * FROM msdb.dbo.sysjobsteps
WHERE job_id = '8A6E1BFF-9F46-4FF9-8E63-ABC8B224B6F8';
Detta returnerar ett resultat som liknar sp_help_jobstep
förfarande.
Om du vill att några av jobbdetaljerna ska returneras (som dess namn), kan du köra en koppling mellan sysjobsteps
och sysjobs_view
.
Exempel:
SELECT
jv.name,
jv.description,
jv.start_step_id,
js.step_id,
js.step_name
FROM msdb.dbo.sysjobs_view jv
LEFT JOIN msdb.dbo.sysjobsteps js
ON jv.job_id = js.job_id;
Här är resultatet i min testmiljö:
Eftersom detta är en vänsteranslutning inkluderar den jobb som inte har några steg (se NULL
i step_id
och step_name
kolumner för jobbet som heter TestJob
).
För att begränsa det till bara de jobb med steg, använd en inre koppling.