T-SQLを使用したSQLServerエージェントジョブの作成に関する前回の記事では、単一の手順でジョブを作成する方法を示しました。
この記事では、複数のステップでジョブを作成する方法を紹介します。
例
T-SQLを使用してSQLServerエージェントジョブを作成する場合は、いくつかのストアドプロシージャを使用する必要があります。これは、各部分が他の部分とは独立して扱われるためです。たとえば、sp_add_job
プロシージャはジョブを作成し、sp_add_jobstep
手順はそのジョブにステップを作成します。
複数のステップを持つジョブを作成する場合は、sp_add_jobstep
を呼び出す必要があります 複数回、各呼び出しは異なるステップを定義します。
また、ジョブをステップを進めて(最初のステップの後でジョブを終了しないように)したい場合は、プロシージャを呼び出すときにそれを指定する必要があります。
これがすべてを行う例です。
USE msdb;
GO
EXEC sp_add_job
@job_name = N'SqlAgentTest',
@description = N'Backup the Movies database.',
@category_name = 'Database Maintenance';
GO
EXEC sp_add_jobstep
@job_name = N'SqlAgentTest',
@step_name = N'Insert data for step 1',
@subsystem = N'TSQL',
@command = N'USE TestDB; INSERT INTO SqlAgentJobs VALUES (''SqlAgentTest'', 1, SYSDATETIME())',
@on_success_action = 3;
GO
EXEC sp_add_jobstep
@job_name = N'SqlAgentTest',
@step_name = N'Insert data for step 2',
@subsystem = N'TSQL',
@command = N'USE TestDB; INSERT INTO SqlAgentJobs VALUES (''SqlAgentTest'', 2, SYSDATETIME())',
@on_success_action = 1;
GO
EXEC sp_add_schedule
@schedule_name = N'Run_Sat_6AM',
@freq_type = 8,
@freq_interval = 64,
@freq_recurrence_factor = 1,
@active_start_time = 060000;
GO
EXEC sp_attach_schedule
@job_name = N'SqlAgentTest',
@schedule_name = N'Run_Sat_6AM';
GO
EXEC sp_add_jobserver
@job_name = N'SqlAgentTest',
@server_name = N'(LOCAL)';
GO
そのコードは、2つのジョブステップを持つジョブを作成します。また、新しいスケジュールを作成し、そのジョブをスケジュールに添付して、ローカルサーバーでジョブをターゲットにします。
ジョブステップを作成する部分は次のとおりです:
EXEC sp_add_jobstep
@job_name = N'SqlAgentTest',
@step_name = N'Insert data for step 1',
@subsystem = N'TSQL',
@command = N'USE TestDB; INSERT INTO SqlAgentJobs VALUES (''SqlAgentTest'', 1, SYSDATETIME())',
@on_success_action = 3;
GO
EXEC sp_add_jobstep
@job_name = N'SqlAgentTest',
@step_name = N'Insert data for step 2',
@subsystem = N'TSQL',
@command = N'USE TestDB; INSERT INTO SqlAgentJobs VALUES (''SqlAgentTest'', 2, SYSDATETIME())',
@on_success_action = 1;
GO
最初の呼び出しで、@on_success_action = 3
になる部分 それが仕事を次のステップに進める理由です。
デフォルト値は1
です 、これは、最初のステップ(2番目のステップで指定したもの)の完了後にジョブが終了することを意味します。したがって、@on_success_action = 3
を含めなかった場合 最初のステップの一部である場合、ジョブは次のステップに進まずに終了します。
@on_fail_action
を指定することもできます 、そのステップが失敗した場合に何が起こるかを指定します。
@on_success_action
に提供できる値 および@on_fail_action
次のとおりです:
1 | 成功して終了します。これは@on_success_action のデフォルトです 。 |
2 | 失敗して終了します。これは@on_fail_action のデフォルトです。 。 |
3 | 次のステップに進みます。 |
4 | ステップ(ID)に進みます。ここで、ジョブを進めるステップのIDを指定します。 |
ジョブステップを表示する
sp_help_job
を使用できます システム内のSQLServerエージェントジョブに関する情報を取得します。
パラメータの有無にかかわらず使用できますが、ジョブステップの詳細を取得するには、ジョブ名またはIDを指定する必要があります。
これを使用して、ジョブ用に作成した両方のジョブステップを確認できます。
このように:
EXEC sp_help_job
@job_name = 'SqlAgentTest';
SSMSで実行した場合の結果は次のようになります。
IDを使用する場合のコードの例を次に示します。
EXEC sp_help_job
@job_id = '343D9F2A-070A-4367-BF69-4248FFF57D70';
IDを使用する場合、必要に応じてパラメータ名を省略できます。
例:
EXEC sp_help_job '343D9F2A-070A-4367-BF69-4248FFF57D70';
sp_help_jobstep
を使用することもできます 同じ方法で、ジョブステップのみを返します(ジョブに関する他のすべての情報は含まれません)。これは、ジョブ名またはID、およびオプションのステップ名またはIDを受け入れます。
完全な構文
sp_add_jobstep
の完全な構文 このようになります:
sp_add_jobstep [ @job_id = ] job_id | [ @job_name = ] 'job_name'
[ , [ @step_id = ] step_id ]
{ , [ @step_name = ] 'step_name' }
[ , [ @subsystem = ] 'subsystem' ]
[ , [ @command = ] 'command' ]
[ , [ @additional_parameters = ] 'parameters' ]
[ , [ @cmdexec_success_code = ] code ]
[ , [ @on_success_action = ] success_action ]
[ , [ @on_success_step_id = ] success_step_id ]
[ , [ @on_fail_action = ] fail_action ]
[ , [ @on_fail_step_id = ] fail_step_id ]
[ , [ @server = ] 'server' ]
[ , [ @database_name = ] 'database' ]
[ , [ @database_user_name = ] 'user' ]
[ , [ @retry_attempts = ] retry_attempts ]
[ , [ @retry_interval = ] retry_interval ]
[ , [ @os_run_priority = ] run_priority ]
[ , [ @output_file_name = ] 'file_name' ]
[ , [ @flags = ] flags ]
[ , { [ @proxy_id = ] proxy_id
| [ @proxy_name = ] 'proxy_name' } ]
sp_add_jobstep
については、Microsoftのドキュメントを参照してください。 各パラメータの説明と、それぞれが受け入れる値について説明します。