Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Thực thi công việc tác nhân SQL Server từ một thủ tục được lưu trữ và trả về kết quả công việc

Dành cho tất cả các bạn, những người không được phép để sử dụng OPENROWSET lệnh, điều này có thể hữu ích. Tôi đã tìm thấy điểm khởi đầu cho giải pháp của mình ở đây:

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

Điều này dựa trên thực tế là một số cột của msdb.dbo.sysjobactivity bảng đầu tiên được điền sau khi công việc kết thúc theo cách này hay cách khác.

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

Bạn có thể muốn kiểm tra xem vòng lặp WHILE được phép chạy trong bao lâu. Tôi đã chọn không để phần đó ra khỏi ví dụ.

Hướng dẫn của Microsoft về mã thoát, v.v.: 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. CHÈN SỐ LƯỢNG LỚN với số lượng cột không nhất quán

  2. SQL Server so với NoSQL

  3. Truy vấn cực kỳ chậm trong mã nhưng nhanh trong SSMS

  4. Cách đặt thời gian chờ cho một thủ tục được lưu trữ trong SQL Server

  5. Trình kích hoạt Máy chủ lưu ở đâu trong SQL Server?