2017-04-19 67 views
0

目前,我正在開展SQL查詢以獲取SQL作業的最後狀態(如「(約)」)。這意味着,我想說明的SQL作業上次執行的每個作業步驟的最後狀態類似如下:SQL查詢以獲取「活動監視器」中的作業步驟狀態

在SQL作業當前正在運行的SQL查詢的結果應該是這樣的情況:

enter image description here

在這種情況下的SQL作業當前未運行SQL查詢的結果應該是這樣的:

enter image description here

我用不同的角落找尋玩像sysjobs,sysjobhistory和sysjobactivity sys表,但我沒有得到這些不同的表在一起。我在網上找到的一切都不符合我的要求。有沒有人有過這樣的要求?任何幫助非常歡迎!

回答

0

封閉我當前的SQL代碼(將參數名稱更改爲您的作業名稱)。當工作徹底完成它的工作原理(對我來說),但如果作業正在運行,並且一些步驟完成等步驟不是我不能找到一個解決方案:

DECLARE @Name NVARCHAR(MAX) SET @Name = 'Test'

--Get job ID = 'DA232252-D704-4ABA-8C95-0236C17A9715' DECLARE @JOB_ID NVARCHAR(MAX) select @JOB_ID=job_ID FROM msdb.dbo.sysjobs where name = @Name

--Get amount of job steps = 2 -1 DECLARE @COUNT_JOB_STEPS INT select @COUNT_JOB_STEPS=Count(job_ID) FROM msdb.dbo.sysjobsteps where job_ID = @JOB_ID SET @COUNT_JOB_STEPS = @COUNT_JOB_STEPS -1

--Check if job is currently running DECLARE @job_history_ID__END INT select @job_history_ID__END=job_history_ID FROM msdb.dbo.sysjobactivity where job_ID = @JOB_ID

if @job_history_ID__END is NULL Begin --Running select 'running'

End 

其他 開始 - 未運行 - >拍攝歷史表

--we do not need "Job outcome" step set @job_history_ID__END = @job_history_ID__END - 1 --Build job_history_ID range DECLARE @job_history_ID__START INT set @job_history_ID__START= @job_history_ID__END - @COUNT_JOB_STEPS --Build final layout select js.job_ID, js.step_ID, js.step_name,'Finished' as Status, started = convert(datetime,convert(varchar, jh.run_date/10000)+'/'+convert(varchar, jh.run_date%1000/100)+'/'+convert(varchar, jh.run_date%100)+' '+convert(varchar, jh.run_time/10000)+':'+convert(varchar, jh.run_time%10000/100)+':'+convert(varchar, jh.run_time%100)+'.000'), ended = convert(datetime,convert(varchar, jh.run_date/10000)+'/'+convert(varchar, jh.run_date%1000/100)+'/'+convert(varchar, jh.run_date%100)+' '+convert(varchar, jh.run_time/10000)+':'+convert(varchar, jh.run_time%10000/100)+':'+convert(varchar, jh.run_time%100)+'.000')+stuff(stuff(replace(str(run_duration,6,0),' ','0'),3,0,':'),6,0,':') FROM msdb.dbo.sysjobsteps as js join msdb.dbo.sysjobhistory as jh on jh.job_ID = @JOB_ID and jh.instance_ID between @job_history_ID__START and @job_history_ID__END and jh.step_id = js.step_ID where js.job_ID = @JOB_ID End

另外一個存儲過程是不是最終的結果,我要尋找的。一個SQL查詢會更好。