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

Esecuzione del processo di SQL Server Agent da una stored procedure e restituzione del risultato del processo

Per tutti voi ragazzi che sono non ammessi per utilizzare OPENROWSET comando, questo potrebbe aiutare. Ho trovato l'inizio per la mia soluzione qui:

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

Ciò si basa sul fatto che alcune colonne di msdb.dbo.sysjobactivity la tabella viene prima popolata al termine del lavoro in un modo o nell'altro.

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

Potresti voler inserire alcuni controlli per quanto tempo è consentito l'esecuzione del ciclo WHILE. Ho scelto di tenere quella parte fuori dall'esempio.

Linee guida Microsoft per codici di uscita ecc.:http://technet.microsoft.com /it-it/library/ms174997.aspx