Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Créer un travail d'Agent SQL Server en plusieurs étapes (T-SQL)

Dans un article précédent sur la création d'une tâche SQL Server Agent avec T-SQL, j'ai montré comment créer une tâche en une seule étape.

Dans cet article, je vais vous montrer comment créer une tâche en plusieurs étapes.

Exemple

Lorsque vous créez un travail de l'Agent SQL Server avec T-SQL, vous devez utiliser plusieurs procédures stockées. En effet, chaque partie est traitée indépendamment des autres. Par exemple, le sp_add_job procédure crée le travail, et le sp_add_jobstep procédure crée une étape dans ce travail.

Lorsque vous créez une tâche comportant plusieurs étapes, vous devez appeler sp_add_jobstep plusieurs fois, chaque appel définissant une étape différente.

De plus, si vous souhaitez que le travail progresse dans les étapes (et ne quitte pas le travail après la première étape), vous devrez le spécifier lorsque vous appelez la procédure.

Voici un exemple qui fait tout cela.

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

Ce code crée un travail avec deux étapes de travail. Il crée également une nouvelle planification, attache cette tâche à la planification, puis cible la tâche sur le serveur local.

La partie qui crée les étapes du travail est la suivante :

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

Au premier appel, la partie qui va @on_success_action = 3 est ce qui fait que le travail continue à l'étape suivante.

La valeur par défaut est 1 , ce qui signifie que le travail se terminera après la fin de la première étape (ce que nous avons spécifié à la deuxième étape). Donc, si nous n'avions pas inclus le @on_success_action = 3 partie de la première étape, le travail se fermait sans passer à l'étape suivante.

Vous pouvez également spécifier @on_fail_action , qui spécifie ce qui se passera si cette étape échoue.

Les valeurs que vous pouvez fournir à @on_success_action et @on_fail_action sont les suivants :

1 Quitter avec succès. C'est la valeur par défaut pour @on_success_action .
2 Quitter avec échec. Il s'agit de la valeur par défaut pour @on_fail_action .
3 Passez à l'étape suivante.
4 Passez à l'étape (ID). C'est ici que vous fournissez l'ID d'une étape pour laquelle vous souhaitez que la tâche progresse.

Afficher les étapes du travail

Vous pouvez utiliser sp_help_job pour obtenir des informations sur les travaux de l'Agent SQL Server dans le système.

Vous pouvez l'utiliser avec ou sans paramètres, mais pour obtenir les détails de l'étape de la tâche, vous devez fournir le nom ou l'ID de la tâche.

Nous pouvons l'utiliser pour voir les deux étapes de travail que nous avons créées pour le travail.

Comme ceci :

EXEC sp_help_job 
	@job_name = 'SqlAgentTest';

Voici à quoi ressemble le résultat lors de son exécution dans SSMS :

Voici un exemple de code lors de l'utilisation de l'ID :

EXEC sp_help_job 
	@job_id = '343D9F2A-070A-4367-BF69-4248FFF57D70';

Lorsque vous utilisez l'ID, vous pouvez omettre le nom du paramètre si vous le souhaitez.

Exemple :

EXEC sp_help_job '343D9F2A-070A-4367-BF69-4248FFF57D70';

Vous pouvez également utiliser sp_help_jobstep de la même manière pour renvoyer uniquement les étapes du travail (sans toutes les autres informations sur le travail). Cela accepte le nom ou l'ID de la tâche, ainsi qu'un nom ou un ID d'étape facultatif.

Syntaxe complète

La syntaxe complète de sp_add_jobstep va comme ceci :

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' } ]

Voir la documentation de Microsoft pour sp_add_jobstep pour une explication de chaque paramètre, ainsi que les valeurs que chacun accepte.