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á.