Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Wykonywanie zadania SQL Server Agent z procedury składowanej i zwracanie wyniku zadania

Dla wszystkich, którym nie wolno aby użyć OPENROWSET polecenie, to może pomóc. Tutaj znalazłem początek mojego rozwiązania:

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

Opiera się to na fakcie, że niektóre kolumny msdb.dbo.sysjobactivity tabela najpierw jest wypełniana po zakończeniu zadania w taki czy inny sposób.

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

Możesz chcieć sprawdzić, jak długo pętla WHILE może działać. Zdecydowałem się trzymać tę część poza przykładem.

Wskazówki firmy Microsoft dotyczące kodów wyjścia itp.:http://technet.microsoft.com /en-us/library/ms174997.aspx



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Błąd PHP podczas łączenia się z bazą danych MS SQL przy użyciu PDO_DBLIB

  2. Jak przywrócić bazę danych SQL Server na komputerze Mac przy użyciu Azure Data Studio

  3. Wyłącz wszystkie indeksy nieklastrowane

  4. Porównania dat SQL Server tylko na podstawie miesiąca i roku

  5. DAY() Przykłady w SQL Server (T-SQL)