Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

3 modi per ottenere i passaggi del processo di un processo di SQL Server Agent (T-SQL)

In questo articolo, presento tre opzioni per restituire i passaggi di un processo di SQL Server Agent quando si utilizza T-SQL.

Le Opzioni

È possibile utilizzare le seguenti opzioni T-SQL per restituire i passaggi di un processo di SQL Server Agent:

  • Opzione 1 :Esegui il sp_help_job procedura memorizzata.
  • Opzione 2 :Esegui sp_help_jobstep procedura memorizzata.
  • Opzione 3 :interroga sysjobsteps table (e unisciti a sysjobs_view se necessario).

Tutte queste opzioni risiedono in msdb database, e quindi devono essere eseguiti in quel database. Puoi farlo passando a msdb prima il database o qualificando l'oggetto in modo appropriato (ad es. msdb.dbo.sysjobsteps ).

Opzione 1:sp_help_job

Quando chiami sp_help_job senza alcun argomento, restituisce semplicemente un elenco di lavori. Ma quando trasmetti il ​​nome o l'ID di un lavoro, vengono elencati i dettagli per quel lavoro, compresi i suoi passaggi.

Ecco un esempio:

EXEC sp_help_job 
	@job_name = 'SqlAgentTest';

Risultato:

Questo elenca il lavoro, così come le fasi del lavoro, le pianificazioni e i server di destinazione.

Ecco un esempio del codice quando si utilizza l'ID:

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

Quando si utilizza l'ID, se lo si desidera, è possibile omettere il nome del parametro.

Esempio:

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

Sintassi

La sintassi completa di sp_help_job va così:

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

Consulta la documentazione di Microsoft per sp_help_job per una spiegazione di ciascun parametro, nonché dei valori che ciascuno accetta.

Opzione 2:sp_help_jobstep

Il sp_help_jobstep la procedura memorizzata è progettata specificamente per restituire i passaggi di un lavoro. Ma questo è tutto ciò che restituisce.

Quindi, se non vuoi vedere nessuna delle cose relative alla pianificazione e al server di destinazione, ecc., questo potrebbe essere quello che stai cercando.

Puoi passare sp_help_jobstep il nome del lavoro o il suo ID (ma non entrambi).

Ecco un esempio:

EXEC sp_help_jobstep
	@job_name = 'SqlAgentTest';

Ed ecco come appare il risultato di un lavoro in due fasi:

È inoltre possibile specificare un ID passaggio se si desidera restituire solo un passaggio specifico. Devi comunque specificare a quale lavoro si riferisce (con il suo ID o nome).

Ecco un esempio per specificare il secondo passaggio del lavoro:

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

L'ID del passaggio deve esistere effettivamente per quel lavoro. Ad esempio, specificando un ID passaggio di 3 per il lavoro sopra riportato si verifica un errore.

Opzione 3:sysjobsteps Tabella

Un'altra opzione è eseguire una query su sysjobsteps tavolo.

Questa tabella contiene i passaggi di tutti i lavori, quindi se desideri solo i passaggi per un lavoro specifico, dovrai trasmettere l'ID lavoro.

Ecco un esempio di query su sysjobsteps tabella per le fasi di un lavoro specifico:

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

Questo restituisce un risultato simile a sp_help_jobstep procedura.

Se vuoi che vengano restituiti alcuni dettagli del lavoro (come il suo nome), puoi eseguire un join tra sysjobsteps e sysjobs_view .

Esempio:

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;

Ecco il risultato nel mio ambiente di test:

Essendo un join sinistro, include lavori che non hanno passaggi (vedi NULL nel step_id e step_name colonne per il lavoro chiamato TestJob ).

Per limitarlo solo a quei lavori con passaggi, usa un inner join.