Gọi một công việc SQL Server trong một công việc khác


10

Có thể gọi một công việc Máy chủ SQL để chạy trong một công việc khác không?

Tôi biết chúng ta có thể thêm tất cả các bước của Công việc 1 vào Công việc 2, nhưng tôi không muốn làm điều đó. Đầu tiên, Công việc 2 đã khá lớn và thứ hai tôi không thể tìm thấy tùy chọn sao chép-dán để sao chép các bước giữa các công việc, vì vậy sẽ rất tốn thời gian để thêm các bước theo cách thủ công.

Bất kỳ đề nghị được đánh giá cao.

Câu trả lời:


7
  • Nhấp chuột phải vào công việc có các bước bạn muốn thêm và chọn "Tập lệnh công việc As-> Tạo cho cửa sổ truy vấn mới", trong tập lệnh kết quả tìm kiếm tất cả các phần có định dạng này
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'<stepname>', 
  @step_id=1, 
  @cmdexec_success_code=0, 
  @on_success_action=3, 
  @on_success_step_id=0, 
  @on_fail_action=2, 
  @on_fail_step_id=0, 
  @retry_attempts=0, 
  @retry_interval=0, 
  @os_run_priority=0, @subsystem=N'TSQL', 
  @command=N'<code>', 
  @database_name=N'', 
  @flags=0
  • Mở một cửa sổ truy vấn mới và chạy này:
DECLARE @jobId BINARY(16)
    SET @jobId = (SELECT job_id FROM msdb.dbo.sysjobs WHERE name = '<job name, to which you want to copy the steps>')

-- Followed by all the msdb.dbo.sp_add_jobstep from the script that scripted out in the earlier step

    EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'<stepname>', 
      @step_id=1, 
      @cmdexec_success_code=0, 
      @on_success_action=3, 
      @on_success_step_id=0, 
      @on_fail_action=2, 
      @on_fail_step_id=0, 
      @retry_attempts=0, 
      @retry_interval=0, 
      @os_run_priority=0, @subsystem=N'TSQL', 
      @command=N'<code>', 
      @database_name=N'', 
      @flags=0

14

lựa chọn 1

Trong Công việc 2, tạo một bước công việc của loại Lệnh TSQL. Trong nội dung, hãy để nó chạy công việc hiện tại ( sp_start_job )

EXECUTE msdb.dbo.sp_start_job 'Job1'

Điều đó sẽ chạy không đồng bộ, do đó sau khi nó bắt đầu gọi thủ tục được lưu trữ, nó sẽ trở lại và thực hiện bước tiếp theo trong công việc. Nó sẽ không chờ đợi công việc bắt đầu hoàn thành. Nếu công việc được gọi thất bại, nó sẽ không quay trở lại công việc gọi.

Lựa chọn 2

Nhấp chuột phải vào Job1 và script vào cửa sổ truy vấn mới. Lặp lại điều đó với Job2 và sau đó xâu các bước công việc từ 1 thành 2 như / khi cần thiết. Nhấp chuột ít hơn nhiều so với tái tạo bánh xe và hy vọng ít bị lỗi hơn.


Cảm ơn vì đã trả lời. Có vẻ như chúng ta phải đi đến Lựa chọn 2. Tôi không chắc là mình có hiểu đúng hay không. Ý bạn là tôi nên tạo các kịch bản cho cả hai công việc, sau đó nối các bước của job2 vào cuối job1? Có đúng không?
Bầu trời

6

Từ stackoverflow (mafafu)

WAITFOR DELAY '00:00:02';
while exists (select * from msdb.dbo.sysjobs j 
                inner join msdb.dbo.sysjobactivity a on j.job_id = a.job_id 
                where name = 'Job 1' 
                and stop_execution_date is null and start_execution_date is not null)
begin
    PRINT 'Waiting...'
    WAITFOR DELAY '00:00:02';   
end

Điều này rất hữu ích cho chúng tôi, nơi chúng tôi cần trì hoãn việc thực hiện công việc thứ hai (chạy vào đầu ngày hôm sau) dựa trên việc thực hiện công việc đầu tiên vào tối muộn.
James D

Tôi đang điều hành một công việc SYNC (Hàng ngày) và Tăng dần (Hàng giờ) và điều này đã giúp tôi kiểm tra Tăng dần và đợi cho đến khi nó kết thúc để chạy SYNC.
snp.it
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.