Ofta är det snabbaste sättet att få en lista över SQL Server Agent-jobb att helt enkelt expandera SQL Server Agent-noden i SSMS Object Explorer.
Men det är inte det enda sättet. Och beroende på din miljö kanske det inte ens är ett alternativ. Om du inte har SSMS eller ett databasverktyg som låter dig se SQL Server Agent-jobben kan du behöva använda T-SQL istället.
I den här artikeln presenterar jag tre alternativ för att returnera en lista över SQL Server Agent-jobb när du använder T-SQL.
Alternativen
Du kan använda följande alternativ för att returnera en lista över SQL Server Agent-jobb med T-SQL:
- Alternativ 1 :Kör
sp_help_job
lagrad procedur. - Alternativ 2 :Fråga
sysjobs_view
visa. - Alternativ 3 :Fråga
sysjobs
bord direkt.
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 databasen först, eller genom att kvalificera objektet på lämpligt sätt (t.ex. msdb.dbo.sysjobs_view
).
Alternativ 1:sp_help_job
När du använder sp_help_job
för att returnera en lista med SQL Server Agent-jobb, kör den helt enkelt utan några argument.
Så här:
USE msdb;
EXEC sp_help_job;
I det här fallet bytte jag till msdb databasen först, vilket innebar att jag inte behövde fullständigt kvalificera proceduren med databasens namn och schema.
Så här ser det ut när jag använder SSMS för att köra det i min testmiljö:
Returnera ett specifikt jobb
Du kan använda samma lagrade procedur för att returnera detaljerna för något av dessa jobb. När du gör det får du mycket mer detaljer än du får när du listar alla jobb.
För att få jobbinformationen måste du ange jobbets namn eller ID.
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 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:sysjobs_view
Visa
Du kan använda sysjobs_view
för att returnera en lista över SQL Server Agent-jobb.
Exempel:
SELECT * FROM msdb.dbo.sysjobs_view;
I det här fallet kvalificerade jag vynamnet med databasen och schemat.
Den här vyn returnerar en liknande (men något annorlunda) resultatuppsättning till sp_help_job
lagrad procedur när den används utan några argument.
Om du vill ha jobbdetaljer som steg, scheman, etc, måste du koppla ihop det med andra tabeller, till exempel sysjobsteps
, sysjobschedules
, syjobactivity
, sysjobhistory
, etc.
Här är ett exempel på hur du ansluter den med sysjobsteps
tabell:
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 stegnamn
kolumner för jobbet som heter TestJob
).
För att begränsa det till bara de jobb med steg, använd en inre koppling.
Alternativ 3:syjobs
Tabell
Här är ett exempel på att gå direkt till syjobs
tabell:
SELECT * FROM msdb.dbo.sysjobs;
Precis som med vyn, om du vill ha jobbdetaljer som steg, scheman osv , sysjobschedules
, syjobactivity
, sysjobhistory
, etc.
Det rekommenderas vanligtvis att fråga vyn snarare än tabellen direkt.