sql >> Databasteknik >  >> RDS >> Sqlserver

Utför SQL Server Agent Job från en lagrad procedur och returnerar jobbresultat

För alla er som inte är tillåtna för att använda OPENROWSET kommando kan det här hjälpa. Jag hittade början till min lösning här:

http://social.msdn.microsoft.com/Forums/en-US/89659729-fea8-4df0-8057-79e0a437b658/dynamically-checking-job-status-with-tsql

Detta bygger på det faktum att vissa kolumner i msdb.dbo.sysjobactivity Tabellen fylls först i efter att jobbet är klart på ett eller annat sätt.

-- Start job
DECLARE @job_name NVARCHAR(MAX) = 'JobName'
EXEC msdb.dbo.sp_start_job @job_name = @job_name


-- Wait for job to finish
DECLARE @job_history_id AS INT = NULL

WHILE @time_constraint = @ok
BEGIN
    SELECT TOP 1 @job_history_id = activity.job_history_id
    FROM msdb.dbo.sysjobs jobs
    INNER JOIN msdb.dbo.sysjobactivity activity ON activity.job_id = jobs.job_id
    WHERE jobs.name = @job_name
    ORDER BY activity.start_execution_date DESC

    IF @job_history_id IS NULL
    BEGIN
        WAITFOR DELAY '00:00:10'
        CONTINUE
    END
    ELSE
        BREAK
END


-- Check exit code
SELECT history.run_status
FROM msdb.dbo.sysjobhistory history
WHERE history.instance_id = @job_history_id

Du kanske vill sätta in några kontroller för hur länge WHILE-loopen får köra. Jag valde att hålla den delen utanför exemplet.

Microsofts vägledning för utgångskoder etc.:http://technet.microsoft.com /en-us/library/ms174997.aspx



  1. SQL-fel (1292):Trunkerat felaktigt DOUBLE-värde:'6893Order '

  2. optimera fråga med datumtypfält i mysql

  3. FuelPHP Oil Migration fungerar inte

  4. Möjligt att ange unikt index med NULL tillåtna i Rails/ActiveRecord?