2017-09-29 7 views
-1

私のクエリにはSchedule_run_idが必要ですが、見つけられません。SQL Server 1つのjobrunからすべてのステップを一覧表示

私はすでにこれを試してみました:

SELECT [sSCH].[schedule_uid], 
h.step_id, 
h.run_status, 
j.name, 
REPLACE(TimeValueToTime(NULL,h.run_date),':','-') + ' ' + 
TimeValueToTime(NULL,h.run_time) AS RUNTIME, 
fnTimeValueToTime(NULL,h.run_duration) AS DURATION 
    FROM  msdb.dbo.sysjobhistory AS h 
    INNER JOIN msdb.dbo.sysjobs AS j ON h.job_id = j.job_id 
     LEFT JOIN [msdb].[dbo].[sysjobschedules] AS [sJOBSCH] 
     ON sJOBSCH.job_id = j.job_id 
    LEFT JOIN [msdb].[dbo].[sysschedules] AS [sSCH] 
     ON [sJOBSCH].[schedule_id] = [sSCH].[schedule_id] 
    WHERE h.step_id != 0 AND 
j.name IN ('Job') 

Schedule_uidは常に同じです。各実行のための特定のIDが必要です。

ありがとうございました!

答えて

0

カウンタなどの特定のIDが必要な場合は、IDENTITY IDのみの一時テーブルを作成し、このクエリが実行されるときに挿入することができます。または、この特定のIDのID列が必要な場合は、SELECTステートメントでNEWID()を使用できます。これによりGUIDが得られます。私はサンプルクエリを追加しています。

CREATE TABLE #temp(
ID INT IDENTITY(1,1) 
) 


INSERT INTO #temp DEFAULT VALUES 

SELECT (SELECT COUNT(*) FROM #temp) AS ID, 
h.step_id, 
h.run_status, 
j.name 
    FROM  msdb.dbo.sysjobhistory AS h 
    INNER JOIN msdb.dbo.sysjobs AS j ON h.job_id = j.job_id 
     LEFT JOIN [msdb].[dbo].[sysjobschedules] AS [sJOBSCH] 
     ON sJOBSCH.job_id = j.job_id 
    LEFT JOIN [msdb].[dbo].[sysschedules] AS [sSCH] 
     ON [sJOBSCH].[schedule_id] = [sSCH].[schedule_id] 
    WHERE h.step_id != 0 AND 
j.name IN ('Job') 

SELECT NEWID() AS ID, 
h.step_id, 
h.run_status, 
j.name 
    FROM  msdb.dbo.sysjobhistory AS h 
    INNER JOIN msdb.dbo.sysjobs AS j ON h.job_id = j.job_id 
     LEFT JOIN [msdb].[dbo].[sysjobschedules] AS [sJOBSCH] 
     ON sJOBSCH.job_id = j.job_id 
    LEFT JOIN [msdb].[dbo].[sysschedules] AS [sSCH] 
     ON [sJOBSCH].[schedule_id] = [sSCH].[schedule_id] 
    WHERE h.step_id != 0 AND 
j.name IN ('Job') 
+0

問題:ジョブが失敗し、正常に再試行された場合、ソリューションは2つの異なるIDを返します。具体化する - >私が望むのは、ある種のJobhistory(SSMSのHistoryを右クリック)をテーブルとして使用することです。 – Meitoasty

関連する問題