BEGIN
DECLARE @jobstatus
TABLE(Job_ID uniqueidentifier, Last_Run_Date INT, Last_Run_Time INT, Next_Run_Date INT,
Next_Run_Time INT,Next_Run_Schedule_ID INT, Requested_To_Run INT,
Request_Source INT, Request_Source_ID VARCHAR(100),
Running INT, Current_Step INT, Current_Retry_Attempt INT, State INT)
INSERT INTO @jobstatus
EXEC MASTER.dbo.xp_sqlagent_enum_jobs 1,garbage
BEGIN
SELECT DISTINCT CASE
WHEN state=1 THEN 'Job is Executing'
WHEN state=2 THEN 'Waiting for thread to complete'
WHEN state=3 THEN 'Between retries'
WHEN state=4 THEN 'Job is Idle'
WHEN state=5 THEN 'Job is suspended'
WHEN state=7 THEN 'Performing completion actions'
END AS State,sj.name,
CASE WHEN ej.running=1 THEN st.step_id ELSE 0 END AS currentstepid,
CASE WHEN ej.running=1 THEN st.step_name ELSE 'not executing' END AS currentstepname,
st.command, ej.request_source_id
FROM @jobstatus ej JOIN msdb..sysjobs sj ON sj.job_id=ej.job_id
JOIN msdb..sysjobsteps st ON st.job_id=ej.job_id AND (st.step_id=ej.current_step OR ej.current_step=0)
WHERE ej.running+1>1
END
END
//SQL/5380