sql >> Databasteknik >  >> RDS >> Sqlserver

3 sätt att returnera en lista över SQL Server Agent-jobb (T-SQL)

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.


  1. Hur man automatiserar distributionen av PostgreSQL-databasen

  2. SQL :i klausul i lagrad procedur:hur man skickar värden

  3. Fråga för att söka i alla paket efter tabell och/eller kolumn

  4. Hur man laddar upp och laddar ner filer PHP och MySQL