sql >> Database >  >> RDS >> Sqlserver

SQL Server Agent Job uitvoeren vanuit een opgeslagen procedure en taakresultaat retourneren

Voor iedereen die niet is toegestaan om de OPENROWSET . te gebruiken commando, dit kan helpen. Ik vond hier het begin voor mijn oplossing:

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

Dit is gebaseerd op het feit dat sommige kolommen van de msdb.dbo.sysjobactivity tabel wordt eerst ingevuld nadat de taak op de een of andere manier is voltooid.

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

Je zou wat controles kunnen doen voor hoe lang de WHILE-loop mag lopen. Ik heb ervoor gekozen om dat deel buiten het voorbeeld te houden.

Microsoft-richtlijnen voor afsluitcodes enz.:http://technet.microsoft.com /nl-nl/bibliotheek/ms174997.aspx



  1. Hoe kan ik resultaten krijgen van een JPA-entiteit die op afstand is geordend?

  2. Mysqldump uitvoeren vanuit een PHP-script werkt niet, maar werkt op SSH

  3. Trage prestaties van SqlDataReader

  4. Onverwacht de PHP-geheugenlimiet bereiken met een enkele PDO-query?