Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Ausführen des SQL Server-Agent-Auftrags aus einer gespeicherten Prozedur und Zurückgeben des Auftragsergebnisses

Für alle, die nicht erlaubt sind um das OPENROWSET zu verwenden Befehl, das könnte helfen. Den Anfang für meine Lösung habe ich hier gefunden:

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

Dies beruht auf der Tatsache, dass einige Spalten der msdb.dbo.sysjobactivity Die Tabelle wird erst gefüllt, nachdem der Job auf die eine oder andere Weise beendet wurde.

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

Vielleicht möchten Sie überprüfen, wie lange die WHILE-Schleife laufen darf. Ich habe mich entschieden, diesen Teil aus dem Beispiel herauszuhalten.

Microsoft-Anleitung für Beendigungscodes usw.:http://technet.microsoft.com /en-us/library/ms174997.aspx