私が欲しいことをするためにクエリを書くのに問題があります。 SQL Serverには、msdb.dbo.sysjobhistoryというシステムテーブルがあります。これには、サーバーで実行され、操作を実行するSQLエージェント・ジョブの履歴が含まれています。表の各行は、ジョブのステップに対応しています。 run_statusというテーブルには、ジョブが完了してテーブルに書き込まれたときの結果を示す整数値を取得するカラムがあります。SQL Serverとsysjobhistory run_statusクエリ
私はいくつかのレポートと簡単なクエリでこの表の情報を追跡します。私は先週、興味深い事例を発見しました。この表では、各行がジョブのステップであっても、全体的な結果として機能するジョブのステップ0のエントリがあります。通常、私はステップ0の行を見て、ジョブの行のrun_statusを取得し、それを結果として使用します。ただし、ジョブのステップが「失敗」ステータスを持つ可能性はありますが、ステップ0の全体的なジョブ結果は「成功」ステータスになります。私はこのような状況を探すために、次のクエリを思い付いた:
SELECT job_id, step_id, step_name, run_date, run_time, run_status, W.parent_status
FROM msdb.dbo.sysjobhistory [H]
CROSS APPLY
(SELECT TOP 1 run_status AS parent_status
FROM msdb.dbo.sysjobhistory
WHERE job_id = H.job_id
AND run_date <= H.run_date
AND step_id = 0
AND (CASE WHEN run_date = H.run_date THEN run_Time ELSE H.run_time END) <= H.run_time
ORDER BY run_date DESC, run_time DESC
) AS [W]
ORDER BY run_date, run_time, step_id
ある特定のjob_idには、次のような結果セット与えるこのクエリ:この状況で
job_id | step_id | step_name | run_date | run_time | run_status | parent_status
-------------------------------------------------------------------------------
A12345 | 0 | (outcome) | 20170112 | 40000 | 1 | 1
A12345 | 1 | step 1 | 20170112 | 43000 | 1 | 1
A12345 | 2 | step 2 | 20170112 | 50000 | 0 | 1
A12345 | 3 | step 3 | 20170112 | 53000 | 1 | 1
のrun_statusを0は失敗を意味し、1のrun_statusは成功を意味する。 私はこのテーブルを持っていますので、実際に何が起こったのかを知るために使っていきたいと思います。私はCASE文または必要なときにステップ0のrun_statusを "上書き"する同様のものを作る必要があります。したがって、上記の状況が発生した場合、代わりにrun_statusに2の値を設定したいとします。だから今、私はただの仕事の成果の手順を照会するとき、私は上記の仕事のためにこのような何かを取得したい:
job_id | step_id | step_name | run_date | run_time | run_status
---------------------------------------------------------------
A12345 | 0 | (outcome) | 20170112 | 40000 | 2
を私は何をしたいのかを知って、私はちょうどそれを行うにはSQLの記述方法を確認していません。私は何とか親ステータスをすべてのrun_status結果と比較する必要があります。親ステータス= 1およびrun_status = 0の場合は、ステップ0のrun_statusを変更してください。