sql >> Database teknologi >  >> RDS >> Sqlserver

Udførelse af SQL Server Agent Job fra en lagret procedure og returnering af jobresultat

Til alle jer, der er ikke tilladt for at bruge OPENROWSET kommando, kan dette hjælpe. Jeg fandt starten på min løsning her:

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

Dette er afhængigt af, at nogle kolonner i msdb.dbo.sysjobactivity tabel først udfyldes efter jobbet er afsluttet på den ene eller den anden måde.

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

Det kan være en god ide at tjekke, hvor længe WHILE-løkken må køre. Jeg valgte at holde den del ude af eksemplet.

Microsoft-vejledning til exit-koder osv.:http://technet.microsoft.com /en-us/library/ms174997.aspx



  1. Hvorfor skulle denne forespørgsel forårsage en Merge Cartesian Join i Oracle

  2. oracle.jdbc.driver.OracleDriver undtagelse for begyndere Java

  3. MySQL Find forskelle i lagerniveauer mellem to tabeller og returner resultatet

  4. Indstilling af Active Data Guard Physical Standby i RAC One Node Architecture – Del 1