dbo.sysjobhistory (Transact-SQL)
適用於:SQL Server Azure SQL 受控執行個體
包含 SQL Server Agent 執行排程作業的相關信息。
注意
在大部分情況下,只有在作業步驟完成之後才會更新數據,而且數據表通常不包含目前進行中之作業步驟的記錄。 在某些情況下,基礎進程 會 提供進行中作業步驟的相關信息。
此數據表會儲存在 msdb
資料庫中。
資料行名稱 | 資料類型 | 描述 |
---|---|---|
instance_id |
int | 數據列的唯一標識碼。 |
job_id |
uniqueidentifier | 作業識別碼。 |
step_id |
int | 作業中步驟的標識碼。 |
step_name |
sysname | 步驟的名稱。 |
sql_message_id |
int | 如果作業失敗,則傳回任何 SQL Server 錯誤訊息的標識碼。 |
sql_severity |
int | 任何 SQL Server 錯誤的嚴重性。 |
message |
nvarchar(4000) | 如果有任何 SQL Server 錯誤,則為文字。 |
run_status |
int | 工作執行的狀態:0 = 失敗1 = 成功2 = 重試3 = 已取消4 = 進行中 |
run_date |
int | 日期工作或步驟開始執行, yyyyMMdd 格式為 。 針對進行中歷程記錄,此值是寫入記錄的日期和時間。 |
run_time |
int | 以格式啟動 HHmmss 作業或步驟的時間。 |
run_duration |
int | 執行作業或步驟 HHmmss 的經過時間,格式為最長 24 小時的時間。 尋找程式代碼,以在範例中轉譯較長的執行持續時間。 |
operator_id_emailed |
int | 作業完成時通知操作員的標識碼。 |
operator_id_netsent |
int | 作業完成時,由訊息通知的操作員標識符。 |
operator_id_paged |
int | 作業完成時,呼叫器所通知的操作員標識碼。 |
retries_attempted |
int | 作業或步驟的重試次數。 |
server |
sysname | 執行作業的伺服器名稱。 |
範例
下列 Transact-SQL 查詢會將 run_date
和 run_time
資料行轉換成名為 的 LastRunStartDateTime
datetime 資料行。 數據run_duration
行會轉換成名為LastRunDurationSeconds
的 int 資料行。 然後,這兩個資料行會用來計算 LastRunFinishDateTime
。 數據 run_duration
行也會轉換成更方便使用的格式。 您可以在 SQL Server Management Studio 或 Azure Data Studio 中執行腳本。
SET NOCOUNT ON;
SELECT sj.name AS Name,
sh.step_name AS StepName,
shp.LastRunStartDateTime,
DATEADD(SECOND, shp.LastRunDurationSeconds, shp.LastRunStartDateTime) AS LastRunFinishDateTime,
shp.LastRunDurationSeconds,
CASE
WHEN sh.run_duration > 235959
THEN CAST((CAST(LEFT(CAST(sh.run_duration AS VARCHAR),
LEN(CAST(sh.run_duration AS VARCHAR)) - 4) AS INT) / 24) AS VARCHAR)
+ '.' + RIGHT('00' + CAST(CAST(LEFT(CAST(sh.run_duration AS VARCHAR),
LEN(CAST(sh.run_duration AS VARCHAR)) - 4) AS INT) % 24 AS VARCHAR), 2)
+ ':' + STUFF(CAST(RIGHT(CAST(sh.run_duration AS VARCHAR), 4) AS VARCHAR(6)), 3, 0, ':')
ELSE STUFF(STUFF(RIGHT(REPLICATE('0', 6) + CAST(sh.run_duration AS VARCHAR(6)), 6), 3, 0, ':'), 6, 0, ':')
END AS [LastRunDuration (d.HH:MM:SS)],
DATEADD(SECOND, shp.LastRunDurationSeconds, shp.LastRunStartDateTime) AS LastRunFinishDateTime
FROM msdb.dbo.sysjobs sj
INNER JOIN msdb.dbo.sysjobhistory sh ON sj.job_id = sh.job_id
CROSS APPLY (SELECT DATETIMEFROMPARTS(sh.run_date / 10000, -- years
sh.run_date % 10000 / 100, -- months
sh.run_date % 100, -- days
sh.run_time / 10000, -- hours
sh.run_time % 10000 / 100, -- minutes
sh.run_time % 100, -- seconds
0 -- milliseconds
) AS LastRunStartDateTime,
(sh.run_duration / 10000) * 3600 -- convert hours to seconds, can be greater than 24
+ ((sh.run_duration % 10000) / 100) * 60 -- convert minutes to seconds
+ (sh.run_duration % 100) AS LastRunDurationSeconds
) AS shp;
GO