Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Exécution du travail de l'Agent SQL Server à partir d'une procédure stockée et retour du résultat du travail

Pour tous ceux qui ne sont pas autorisés pour utiliser OPENROWSET commande, cela pourrait aider. J'ai trouvé le début de ma solution ici :

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

Cela repose sur le fait que certaines colonnes de l'activité msdb.dbo.sysjobactivity la table est d'abord remplie après la fin du travail d'une manière ou d'une autre.

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

Vous voudrez peut-être vérifier pendant combien de temps la boucle WHILE est autorisée à s'exécuter. J'ai choisi de ne pas inclure cette partie dans l'exemple.

Conseils Microsoft pour les codes de sortie, etc. :http://technet.microsoft.com /en-us/library/ms174997.aspx