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

Come posso determinare lo stato di un lavoro?

Vorrei sottolineare che nessuno dei T-SQL in questa pagina funzionerà proprio perché nessuno di essi si unisce alle syssessions tabella per ottenere solo la sessione corrente e quindi potrebbe includere falsi positivi.

Vedi questo per riferimento:Cosa significa avere lavori con una data di fine nulla?

Puoi anche convalidarlo analizzando la sp_help_jobactivity procedura in msdb .

Mi rendo conto che questo è un vecchio messaggio su SO, ma ho trovato questo messaggio solo parzialmente utile a causa del problema.

SELECT
    job.name, 
    job.job_id, 
    job.originating_server, 
    activity.run_requested_date, 
    DATEDIFF( SECOND, activity.run_requested_date, GETDATE() ) as Elapsed
FROM 
    msdb.dbo.sysjobs_view job
JOIN
    msdb.dbo.sysjobactivity activity
ON 
    job.job_id = activity.job_id
JOIN
    msdb.dbo.syssessions sess
ON
    sess.session_id = activity.session_id
JOIN
(
    SELECT
        MAX( agent_start_date ) AS max_agent_start_date
    FROM
        msdb.dbo.syssessions
) sess_max
ON
    sess.agent_start_date = sess_max.max_agent_start_date
WHERE 
    run_requested_date IS NOT NULL AND stop_execution_date IS NULL