Spesso il modo più rapido per ottenere un elenco di processi di SQL Server Agent è semplicemente espandere il nodo di SQL Server Agent in Esplora oggetti SSMS.
Ma non è l'unico modo. E a seconda del tuo ambiente, potrebbe non essere nemmeno un'opzione. Se non disponi di SSMS o di uno strumento di database che ti consenta di visualizzare i processi di SQL Server Agent, potrebbe essere necessario utilizzare invece T-SQL.
In questo articolo, presento tre opzioni per restituire un elenco di processi di SQL Server Agent quando si utilizza T-SQL.
Le Opzioni
È possibile utilizzare le seguenti opzioni per restituire un elenco di processi di SQL Server Agent con T-SQL:
- Opzione 1 :Esegui il
sp_help_job
procedura memorizzata. - Opzione 2 :interroga
sysjobs_view
visualizza. - Opzione 3 :interroga i
sysjobs
tavolo direttamente.
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.sysjobs_view
).
Opzione 1:sp_help_job
Quando si utilizza sp_help_job
per restituire un elenco di processi di SQL Server Agent, eseguilo semplicemente senza argomenti.
In questo modo:
USE msdb;
EXEC sp_help_job;
In questo caso sono passato a msdb prima il database, il che significava che non avevo bisogno di qualificare completamente la procedura con il nome e lo schema del database.
Ecco come appare quando utilizzo SSMS per eseguirlo nel mio ambiente di test:
Restituisci un lavoro specifico
È possibile utilizzare la stessa procedura memorizzata per restituire i dettagli di uno qualsiasi di questi lavori. Quando lo fai, ottieni molti più dettagli di quelli che ottieni elencando tutti i lavori.
Per ottenere i dettagli del lavoro, devi fornire il nome o l'ID del lavoro.
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:sysjobs_view
Visualizza
Puoi usare sysjobs_view
per restituire un elenco di processi di SQL Server Agent.
Esempio:
SELECT * FROM msdb.dbo.sysjobs_view;
In questo caso ho qualificato il nome della vista con il database e lo schema.
Questa vista restituisce un set di risultati simile (ma leggermente diverso) a sp_help_job
stored procedure se utilizzata senza argomenti.
Se desideri dettagli sul lavoro come passaggi, orari e così via, dovrai unirlo ad altre tabelle, come sysjobsteps
, sysjobschedules
, sysjobactivity
, sysjobhistory
, ecc.
Ecco un esempio di unione con sysjobsteps
tabella:
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.
Opzione 3:sysjobs
Tabella
Ecco un esempio di accesso diretto a sysjobs
tabella:
SELECT * FROM msdb.dbo.sysjobs;
Come per la vista, se desideri dettagli sul lavoro come passaggi, pianificazioni e così via, dovrai unirti ad altre tabelle, come sysjobsteps
, sysjobschedules
, sysjobactivity
, sysjobhistory
, ecc.
Di solito si consiglia di interrogare direttamente la vista anziché la tabella.