SQL Serverジョブを呼び出して別のジョブ内で実行することは可能ですか?
ジョブ1のすべてのステップをジョブ2に追加できることはわかっていますが、追加しない方がよいでしょう。 1つはジョブ2がすでに非常に大きく、2つ目はジョブ間でステップをコピーするためのコピーと貼り付けのオプションが見つからなかったため、ステップを手動で追加するのに時間がかかります。
任意の提案をいただければ幸いです。
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
Job2で、TSQLコマンドタイプのジョブステップを作成します。コンテンツで、既存のジョブを実行する( sp_start_job )
EXECUTE msdb.dbo.sp_start_job 'Job1'
これは非同期で実行されるため、ストアドプロシージャの呼び出しを開始すると、ジョブの次のステップに戻り、実行されます。その開始されたジョブが完了するのを待ちません。呼び出されたジョブが失敗した場合、呼び出されたジョブにパーコレートされません。
Job1を右クリックし、新しいクエリウィンドウにスクリプトを記述します。 Job2でも同じことを繰り返し、必要に応じてジョブステップを1から2にスレッド化します。ホイールを再作成するよりもはるかにクリックが少なく、うまくいけばエラーが発生しにくくなります。
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