2017-04-19 9 views
0

現在、私はSQLサーバの "Activity Monitor"のようなSQLジョブの最終ステータスを取得するためにSQLクエリを作成しています。これは、次のようなSQLジョブの最後の実行の各ジョブステップの最後の状態を表示することを意味します。"Activity Monitor"のようなジョブステップステータスを取得するSQLクエリ

SQLジョブが現在実行されている場合、SQLクエリの結果は次のようになります。

場合はSQLジョブが現在のSQLクエリの結果を実行していない

enter image description here

は次のようになります。

enter image description here

を私は違うとarroundの演奏しました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 

は --notを開始しますランニング - >履歴テーブルに乗り

--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クエリはより良いでしょう。

関連する問題