在另一个作业中调用SQL Server作业


10

是否可以调用SQL Server作业在另一个作业中运行?

我知道我们可以将作业1的所有步骤添加到作业2中,但是我不愿意这样做。首先,作业2已经很大,其次,我找不到在作业之间复制步骤的复制粘贴选项,因此手动添加步骤会很耗时。

任何建议表示赞赏。

Answers:


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

在Job2中,创建TSQL Command类型的作业步骤。在内容中,让它运行现有作业(sp_start_job

EXECUTE msdb.dbo.sp_start_job 'Job1'

那将异步运行,因此在它开始调用存储过程之后,它将返回并执行作业的下一步。它不会等待开始的作业完成。如果被调用的作业失败,它将不会渗透回调用作业。

选项2

右键单击Job1并脚本到新的查询窗口。对Job2重复该步骤,然后根据需要/在需要的地方将作业步骤从1穿入2。与重新创建轮子相比,单击的次数要少得多,并且希望不会出现更多错误。


感谢您的回复。看来我们必须选择选项2。不过,我不确定我是否正确理解它。您是说我应该为两个作业创建脚本,然后将作业2的步骤附加到作业1的末尾吗?那正确吗?
2012年

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(每日)和Incremental(小时)作业,这帮助我保持对Incremental的检查,直到完成SYNC为止。
snp.it
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.