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