sql >> Databáze >  >> RDS >> Sqlserver

Přidání kroku úlohy do existující úlohy agenta SQL Server (T-SQL)

Když vytvoříte úlohu SQL Server Agent pomocí T-SQL, použijete sp_add_jobstep uložená procedura pro přidání každého kroku úlohy.

Pokud budete někdy k této úloze potřebovat přidat nový krok, můžete použít sp_add_jobstep ještě jednou pro přidání nového kroku úlohy.

Možná však budete muset upravit stávající krok v závislosti na tom, jak chcete, aby úloha postupovala jednotlivými kroky.

Příklad

V tomto příkladu vytvoříme úlohu s jedním krokem úlohy, pak použijeme sp_add_jobstep přidat k této práci druhý krok. Poté použijeme sp_update_jobstep aktualizovat první krok úlohy tak, aby postoupil do druhého kroku úlohy, jakmile bude dokončen.

Vytvořte úlohu

Nejprve vytvořte úlohu jedním krokem:

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

Aby bylo jasno, následující část byla bitem, který přidal krok:

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

Přidat nový krok úlohy

Nyní můžeme použít sp_add_jobstep znovu, abyste k úloze přidali nový krok.

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

Toto přidá k úloze druhý krok.

Aktualizujte pracovní postup

Pokud chcete, aby úloha automaticky postoupila z kroku 1 do kroku 2, musíte to zadat v kroku 1 úlohy.

Výchozí akcí pro jakýkoli krok úlohy je úspěšné ukončení úlohy, jakmile bude úspěšná. Pokud se krok nezdaří, výchozí akcí je ukončení se selháním.

Vzhledem k tomu, že naše úloha aktuálně funguje, úloha bude dokončena, jakmile bude dokončen krok 1 (bez spuštění kroku 2), a historie bude hlásit, že úloha proběhla úspěšně.

Proto musíme použít sp_update_jobstep aktualizovat krok 1, aby po úspěšném dokončení postoupil ke kroku 2.

Můžeme také určit, co dělat, pokud krok 1 selže.

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

V tomto případě jsem uvedl, že by měl postoupit k dalšímu kroku jak v případě úspěchu, tak i v případě, že selže.

Hodnoty, které můžete poskytnout @on_success_action a @on_fail_action jsou následující:

1 Skončit s úspěchem. Toto je výchozí hodnota pro @on_success_action .
2 Ukončit se selháním. Toto je výchozí nastavení pro @on_fail_action .
3 Přejděte na další krok.
4 Přejděte na krok (ID). Zde zadáte ID kroku, ke kterému chcete, aby úloha postoupila.

Zobrazit kroky úlohy

Můžete použít sp_help_job získat informace o úlohách SQL Server Agent v systému.

Můžete ji použít s parametry nebo bez nich, ale abyste získali podrobnosti o kroku úlohy, musíte zadat název nebo ID úlohy.

Můžeme jej použít k zobrazení obou kroků úlohy, které jsme pro úlohu vytvořili.

Asi takto:

EXEC sp_help_job 
	@job_name = 'SqlAgentTest';

Takto vypadá výsledek při jeho spuštění v SSMS:

Zde je příklad kódu při použití ID:

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

Při použití ID můžete název parametru vynechat, chcete-li.

Příklad:

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

Můžete také použít sp_help_jobstep stejným způsobem vrátit pouze kroky úlohy (bez všech dalších informací o zakázce). To přijímá název úlohy nebo ID, stejně jako volitelný název kroku nebo ID.

Úplná syntaxe

Úplná syntaxe sp_add_jobstep vypadá takto:

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

Viz dokumentaci společnosti Microsoft pro sp_add_jobstep pro vysvětlení každého parametru a také hodnot, které každý přijímá.

Úplná syntaxe sp_update_jobstep vypadá takto:

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

Viz dokumentaci společnosti Microsoft pro sp_update_jobstep pro vysvětlení každého parametru a také hodnot, které každý přijímá.


  1. Skrytá vylepšení výkonu a správy v SQL Server 2012 / 2014

  2. 2 způsoby, jak přidat znak procenta k číslu v SQLite

  3. Jak převést řetězec na datum/čas na serveru SQL pomocí CONVERT()

  4. Může se omezení kontroly vztahovat k jiné tabulce?