다른 작업 내에서 SQL Server 작업 호출


10

다른 작업 내에서 실행하기 위해 SQL Server 작업을 호출 할 수 있습니까?

작업 1의 모든 단계를 작업 2에 추가 할 수 있다는 것을 알고 있지만 그렇게하지 않는 것이 좋습니다. 첫 번째 작업 2는 이미 상당히 크고 두 번째 작업 사이에 단계를 복사하는 복사-붙여 넣기 옵션을 찾을 수 없으므로 단계를 수동으로 추가하는 데 시간이 많이 걸립니다.

모든 제안을 부탁드립니다.

답변:


7
  • 단계를 추가하려는 작업을 마우스 오른쪽 단추로 클릭하고 "스크립트 작업으로-> 새 쿼리에 작성 창"을 선택하십시오. 결과 스크립트에서이 형식의 모든 섹션을 찾으십시오.
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
  • 새 쿼리 창을 열고 다음을 실행하십시오.
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

옵션 1

작업 2에서 TSQL 명령 유형의 작업 단계를 작성하십시오. 컨텐츠에서 기존 작업 ( sp_start_job )을 실행하십시오.

EXECUTE msdb.dbo.sp_start_job 'Job1'

비동기식으로 실행되므로 저장 프로 시저 호출을 시작한 후 작업의 다음 단계로 돌아와서 수행합니다. 시작된 작업이 완료 될 때까지 기다리지 않습니다. 호출 된 작업이 실패하면 호출 작업으로 다시 침투되지 않습니다.

옵션 2

Job1을 마우스 오른쪽 버튼으로 클릭하고 새 쿼리로 스크립트 창 이를 Job2로 반복 한 다음 필요에 따라 작업 단계를 1에서 2로 스레드하십시오. 휠을 재생성하는 것보다 클릭이 훨씬 적고 오류 발생 가능성이 적습니다.


답장을 보내 주셔서 감사합니다. 옵션 2로 가야 할 것 같습니다.하지만 올바르게 이해했는지 확실하지 않습니다. 두 작업 모두에 대한 스크립트를 작성한 다음 job2 단계를 job1 끝에 추가해야합니까? 맞습니까?
Sky

6

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

이것은 늦은 시간에 첫 번째 작업의 실행을 기반으로 두 번째 작업 (다음 날 초에 실행)의 실행을 지연시켜야하는 경우에 유용했습니다.
James D

SYNC (Daily) 및 Incremental (Hourly) 작업을 실행 중이므로 Incremental을 확인하고 SYNC 실행이 끝날 때까지 기다릴 수있었습니다.
snp.it 2018 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.