Compartir a través de


dbo.sysjobhistory (Transact-SQL)

Se aplica a:SQL ServerAzure SQL Managed Instance

Contiene información sobre la ejecución de trabajos programados por el Agente SQL Server.

Nota:

En la mayoría de los casos, los datos se actualizan solo una vez completado el paso de trabajo y la tabla normalmente no contiene registros para los pasos de trabajo que están actualmente en curso. En algunos casos, los procesos subyacentes proporcionan información sobre los pasos de trabajo en curso.

Esta tabla se almacena en la msdb base de datos.

Nombre de la columna Tipo de datos Descripción
instance_id int Identificador único de la fila.
job_id uniqueidentifier Id. del trabajo.
step_id int Id. del paso en el trabajo.
step_name sysname Nombre del paso.
sql_message_id int Identificador de cualquier mensaje de error de SQL Server devuelto si se produjo un error en el trabajo.
sql_severity int Gravedad de cualquier error de SQL Server.
message nvarchar(4000) Texto, si existe, de un error de SQL Server.
run_status int Estado de la ejecución del trabajo:

0 = Error
1 = Correcto
2 = Reintento
3 = Cancelado
4 = En curso
run_date int Fecha de ejecución iniciada del trabajo o del paso, en yyyyMMdd formato. Para un historial en curso, este valor es la fecha y hora en que se escribió el historial.
run_time int Hora en que se inició el trabajo o el paso en HHmmss formato.
run_duration int Tiempo transcurrido en la ejecución del trabajo o paso en HHmmss formato para períodos de tiempo de hasta 24 horas. Busque código para traducir duraciones de ejecución más largas en el ejemplo.
operator_id_emailed int Id. del operador al que se notificó la terminación del trabajo.
operator_id_netsent int Id. del operador al que se notificó con un mensaje la terminación del trabajo.
operator_id_paged int Id. del operador al que se notificó por buscapersonas la terminación del trabajo.
retries_attempted int Número de intentos de ejecución del trabajo o paso.
server sysname Nombre del servidor en el que se ejecutó el trabajo.

Ejemplos

La siguiente consulta transact-SQL convierte las run_date columnas y run_time en una columna datetime denominada .LastRunStartDateTime La run_duration columna se convierte en una columna int denominada LastRunDurationSeconds. A continuación, estas dos columnas se usan para calcular .LastRunFinishDateTime La run_duration columna también se convierte en un formato más fácil de usar. Puede ejecutar el script en SQL Server Management Studio o 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