Sky*_*Sky 12 sql-server-2008-r2 jobs
是否可以调用 SQL Server 作业在另一个作业中运行?
我知道我们可以将作业 1 的所有步骤添加到作业 2,但我不想这样做。首先,作业 2 已经很大,其次我找不到复制粘贴选项来在作业之间复制步骤,因此手动添加步骤会很耗时。
任何建议表示赞赏。
bil*_*nkc 15
在 Job2 中,创建一个 TSQL 命令类型的作业步骤。在内容中,让它运行现有的作业 ( sp_start_job )
EXECUTE msdb.dbo.sp_start_job 'Job1'
Run Code Online (Sandbox Code Playgroud)
那将异步运行,因此在它开始调用存储过程后,它将返回并执行作业中的下一步。它不会等待已开始的作业完成。如果被调用的作业失败,它将不会渗透回调用作业。
右键单击 Job1 并将脚本写入新的查询窗口。对 Job2 重复此操作,然后根据需要将作业步骤从 1 线程化到 2。点击次数比重新创建轮子要少得多,并且希望更不容易出错。
Run Code Online (Sandbox Code Playgroud)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
Run Code Online (Sandbox Code Playgroud)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
小智 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
Run Code Online (Sandbox Code Playgroud)