sql >> データベース >  >> RDS >> Sqlserver

マルチステップSQLServerエージェントジョブ(T-SQL)を作成する

    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のドキュメントを参照してください。 各パラメータの説明と、それぞれが受け入れる値について説明します。


    1. Linux上のMSSQLServerとWindowsのパフォーマンステストで違いを見つける

    2. T-SQLストアドプロシージャで動的にテーブルを作成する方法は?

    3. Oracleのミリ秒単位のタイムスタンプの違い

    4. MySQLの現在のタイムゾーンを取得するにはどうすればよいですか?