順番に実行する必要のあるSQLServerエージェントジョブがいくつかあります。実行する必要のあるジョブの概要を把握するために、を呼び出して他のジョブを呼び出すメインジョブを作成しましたEXEC msdb.dbo.sp_start_job N'TEST1'
。すぐにsp_start_job
終了しますが(ジョブステップ1)、メインのジョブをジョブTEST1
が終了するまで待ってから次のジョブを呼び出します。
そこで、ジョブが呼び出された直後に実行を開始し(ジョブステップ2)、サブジョブが終了するまでメインジョブを強制的に待機させるこの小さなスクリプトを作成しました。
WHILE 1 = 1
BEGIN
WAITFOR DELAY '00:05:00.000';
SELECT *
INTO #jobs
FROM OPENROWSET('SQLNCLI', 'Server=TESTSERVER;Trusted_Connection=yes;',
'EXEC msdb.dbo.sp_help_job @job_name = N''TEST1'',
@execution_status = 0, @job_aspect = N''JOB''');
IF NOT (EXISTS (SELECT top 1 * FROM #jobs))
BEGIN
BREAK
END;
DROP TABLE #jobs;
END;
これで十分に機能します。WHILE 1 = 1
しかし、私はより賢く、そして/またはより安全な( ?)解決策が可能であると感じました。
私は次のことに興味があります。あなたが私にいくつかの洞察を提供してくれることを願っています:
- このアプローチの問題は何ですか?
- これを行うためのより良い方法を提案できますか?
(私はこの質問をdba.stackexchange.comにも投稿しました。これは、プログラミングが少なく、dbaが多いという観点からも利益を得るためです。)