dbo.sysjobhistory (Transact-SQL)

platí pro:SQL Serverazure SQL Managed Instance

Obsahuje informace o provádění plánovaných úloh SQL Server Agentem.

Poznámka:

Ve většině případů se data aktualizují až po dokončení kroku úlohy a tabulka obvykle neobsahuje žádné záznamy pro probíhající kroky úlohy. V některých případech základní procesy poskytují informace o probíhajících krocích úlohy.

Tato tabulka je uložena v databázi msdb .

Název sloupce Datový typ Description
instance_id int Jedinečný identifikátor pro daný řádek.
job_id uniqueidentifier ID úlohy.
step_id int Identifikace kroku v práci.
step_name sysname Název kroku
sql_message_id int ID jakékoli chybové zprávy SQL Server se vrátilo, pokud úkol selhal.
sql_severity int Závažnost jakékoli chyby SQL Serveru.
message nvarchar(4000) Text, pokud nějaký je, chyba SQL Serveru.
run_status int Stav realizace práce:

0 = Neuspěl
1 = Podařilo se
2 = Opakování
3 = Zrušeno
4 = Ve vývoji
run_date int Datum zahájení práce nebo kroku v podobě formátu yyyyMMdd . Pro historii Ve vývoji je tato hodnota datum a čas, kdy byla historie napsána.
run_time int Načasujte začátek práce nebo kroku ve formátu HHmmss .
run_duration int Uplynulý čas při provedení úkolu nebo kroku HHmmss ve formátu pro období až 24 hodin. Najděte kód pro překlad delších běhů v příkladu.
operator_id_emailed int ID operátora bylo oznámeno při dokončení zakázky.
operator_id_netsent int ID operátora bylo oznámeno zprávou po dokončení práce.
operator_id_paged int ID operátora bylo oznámeno pagerem po dokončení práce.
retries_attempted int Počet pokusů o opakování úkolu nebo kroku.
server sysname Název serveru, na kterém byla práce vykonána.

Examples

Následující dotaz Transact-SQL převede run_date sloupce a run_time na sloupec s názvem datetime s názvem LastRunStartDateTime. Sloupec run_duration je převeden na sloupec s názvem LastRunDurationSeconds. Tyto dva sloupce se pak použijí k výpočtu .LastRunFinishDateTime Sloupek run_duration je také převeden do uživatelsky přívětivějšího formátu.

K instanci SQL Serveru se můžete připojit pomocí libovolného známého klientského nástroje SQL Serveru, jako je sqlcmd, SQL Server Management Studio (SSMS) nebo rozšíření MSSQL pro Visual Studio Code.

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)]
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