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

既存のSQLServerエージェントジョブ(T-SQL)にジョブステップを追加する

    T-SQLを使用してSQLServerエージェントジョブを作成するときは、sp_add_jobstepを使用します 各ジョブステップを追加するためのストアドプロシージャ。

    そのジョブに新しいステップを追加する必要がある場合は、sp_add_jobstepを使用できます。 もう一度、新しいジョブステップを追加します。

    ただし、ジョブのステップの進行方法によっては、既存のステップを変更する必要がある場合もあります。

    この例では、1つのジョブステップでジョブを作成してから、sp_add_jobstepを使用します。 そのジョブに2番目のステップを追加します。次に、sp_update_jobstepを使用します 最初のジョブステップを更新して、完了するとすぐに2番目のジョブステップに進むようにします。

    ジョブを作成する

    まず、1つのステップでジョブを作成します:

    USE msdb;  
    GO  
    EXEC sp_add_job  
        @job_name = N'SqlAgentTest',
        @description = N'Insert data.',
        @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())';
    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';
    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())';

    新しいジョブステップを追加する

    これで、sp_add_jobstepを使用できます もう一度、ジョブに新しいステップを追加します。

    USE msdb;
    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())';

    これにより、ジョブに2番目のステップが追加されます。

    ワークフローを更新する

    ジョブをステップ1からステップ2に自動的に進める場合は、ジョブステップ1でそれを指定する必要があります。

    ジョブステップのデフォルトのアクションは、成功するとすぐにジョブを終了して成功することです。ステップが失敗した場合、デフォルトのアクションは失敗して終了することです。

    したがって、現在のジョブは、ステップ1が完了するとすぐに(ステップ2を実行せずに)終了し、履歴にはジョブが正常に実行されたことが報告されます。

    したがって、sp_update_jobstepを使用する必要があります ステップ1を更新して、正常に完了するとステップ2に進むようにします。

    手順1が失敗した場合の対処方法を指定することもできます。

    USE msdb;
    EXEC sp_update_jobstep  
        @job_name = N'SqlAgentTest',  
        @step_id = 1,  
        @on_success_action = 3,  
        @on_fail_action = 3;

    この場合、成功した場合と失敗した場合の両方で次のステップに進む必要があることを指定しました。

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

    sp_update_jobstepの完全な構文 このようになります:

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


    1. 削除されたDockerコンテナからデータを回復する方法は?それをデータに再接続する方法は?

    2. ケースとデコード

    3. SQLServerテーブルのID列の値をリセットする方法-SQLServer/T-SQLチュートリアルパート43

    4. MySQLでn番目の行を見つける方法