sql >> Database >  >> RDS >> Sqlserver

3 manieren om de taakstappen van een SQL Server Agent-taak (T-SQL) te krijgen

In dit artikel presenteer ik drie opties voor het retourneren van de stappen van een SQL Server Agent-taak bij gebruik van T-SQL.

De opties

U kunt de volgende T-SQL-opties gebruiken om de stappen van een SQL Server Agent-taak te retourneren:

  • Optie 1 :Voer de sp_help_job uit opgeslagen procedure.
  • Optie 2 :Voer de sp_help_jobstep . uit opgeslagen procedure.
  • Optie 3 :Query de sysjobsteps tabel (en voeg eraan toe met sysjobs_view indien vereist).

Al deze opties bevinden zich in de msdb database, en moeten daarom in die database worden uitgevoerd. U kunt dat doen door over te schakelen naar de msdb database eerst, of door het object op de juiste manier te kwalificeren (bijv. msdb.dbo.sysjobsteps ).

Optie 1:sp_help_job

Wanneer u sp_help_job . belt zonder argumenten retourneert het eenvoudig een lijst met taken. Maar wanneer u de naam of ID van een taak doorgeeft, worden de details voor die taak weergegeven, inclusief de stappen.

Hier is een voorbeeld:

EXEC sp_help_job 
	@job_name = 'SqlAgentTest';

Resultaat:

Dit geeft een overzicht van de taak, evenals alle taakstappen, schema's en doelservers.

Hier is een voorbeeld van de code bij gebruik van de ID:

EXEC sp_help_job 
	@job_id = '343D9F2A-070A-4367-BF69-4248FFF57D70';

Als u de ID gebruikt, kunt u desgewenst de parameternaam weglaten.

Voorbeeld:

EXEC sp_help_job '343D9F2A-070A-4367-BF69-4248FFF57D70';

Syntaxis

De volledige syntaxis van sp_help_job gaat als volgt:

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' ]

Zie de documentatie van Microsoft voor sp_help_job voor een uitleg van elke parameter, evenals de waarden die elke parameter accepteert.

Optie 2:sp_help_jobstep

De sp_help_jobstep opgeslagen procedure is speciaal ontworpen om de stappen van een taak te retourneren. Maar dat is alles wat het teruggeeft.

Dus als u niets wilt zien van de planning en doelserver-dingen, enz., is dit misschien wat u zoekt.

Je kunt sp_help_jobstep doorgeven de taaknaam of de ID (maar niet beide).

Hier is een voorbeeld:

EXEC sp_help_jobstep
	@job_name = 'SqlAgentTest';

En zo ziet het resultaat eruit bij een klus in twee stappen:

U kunt ook een stap-ID opgeven als u alleen een specifieke stap wilt retourneren. Je moet echter nog steeds specificeren voor welke taak het is (met zijn ID of naam).

Hier is een voorbeeld van het specificeren van de tweede stap in de taak:

EXEC sp_help_jobstep
	@job_name = 'SqlAgentTest', 
	@step_id = 2;

De stap-ID moet daadwerkelijk bestaan ​​voor die taak. Bijvoorbeeld, het specificeren van een stap-ID van 3 voor de bovenstaande taak resulteert in een fout.

Optie 3:De sysjobsteps Tabel

Een andere optie is om een ​​query uit te voeren tegen de sysjobsteps tafel.

Deze tabel bevat de stappen van alle taken, dus als u alleen de stappen voor een specifieke taak wilt, moet u de taak-ID doorgeven.

Hier is een voorbeeld van het opvragen van de sysjobsteps tabel voor de stappen van een specifieke taak:

SELECT * FROM msdb.dbo.sysjobsteps
WHERE job_id = '8A6E1BFF-9F46-4FF9-8E63-ABC8B224B6F8';

Dit geeft een vergelijkbaar resultaat als de sp_help_jobstep procedure.

Als u wilt dat sommige taakdetails worden geretourneerd (zoals de naam), kunt u een join uitvoeren tussen sysjobsteps en sysjobs_view .

Voorbeeld:

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;

Dit is het resultaat in mijn testomgeving:

Aangezien dit een left join is, bevat het jobs die geen stappen hebben (zie de NULL in de step_id en step_name kolommen voor de taak genaamd TestJob ).

Gebruik een inner join om het te beperken tot alleen die taken met stappen.


  1. Schakel root-aanmelding uit in phpMyAdmin

  2. mysql - hoeveel kolommen is te veel?

  3. Hoe kan ik de som van meerdere datetime-waarden krijgen?

  4. Verschillen tussen INDEX, PRIMAIRE, UNIEKE, FULLTEXT in MySQL?