sql >> Databasteknik >  >> RDS >> Sqlserver

3 sätt att få jobbstegen för ett SQL Server Agent Job (T-SQL)

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 med sysjobs_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.


  1. MySQL:Hur kopierar man rader, men ändrar några fält?

  2. Skillnad mellan två datum i MySQL

  3. Ett JNI-fel har uppstått, kontrollera din installation och försök igen i Eclipse x86 Windows 8.1

  4. Ta reda på om ett objekt är en användardefinierad tabell i SQL Server med OBJECTPROPERTY()