Podczas tworzenia zadania agenta SQL Server za pomocą T-SQL, używasz sp_add_jobstep
procedura składowana, aby dodać każdy krok zadania.
Jeśli kiedykolwiek będziesz musiał dodać nowy krok do tego zadania, możesz użyć sp_add_jobstep
jeszcze raz, aby dodać nowy krok zadania.
Ale może być również konieczne zmodyfikowanie istniejącego kroku, w zależności od tego, jak chcesz, aby zadanie przebiegało przez poszczególne kroki.
Przykład
W tym przykładzie tworzymy zadanie z jednym krokiem zadania, a następnie używamy sp_add_jobstep
aby dodać drugi krok do tej pracy. Następnie używamy sp_update_jobstep
aby zaktualizować pierwszy etap zadania, aby przeszedł do drugiego etapu zadania zaraz po jego zakończeniu.
Utwórz zadanie
Najpierw utwórz zadanie w jednym kroku:
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
Żeby było jasne, następująca część była częścią, która dodała ten 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())';
Dodaj nowy etap pracy
Możemy teraz użyć sp_add_jobstep
ponownie, aby dodać nowy krok do zadania.
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())';
To dodaje drugi krok do zadania.
Zaktualizuj przepływ pracy
Jeśli chcesz, aby zadanie automatycznie przechodziło od kroku 1 do kroku 2, musisz to określić w kroku 1.
Domyślną akcją dla każdego etapu zadania jest pomyślne zakończenie zadania, gdy tylko się powiedzie. Jeśli krok się nie powiedzie, domyślną akcją jest zakończenie z niepowodzeniem.
Tak więc, ponieważ nasze zadanie jest obecnie aktualne, zadanie zakończy się, gdy tylko zakończy się krok 1 (bez uruchamiania kroku 2), a historia zgłosi, że zadanie zostało wykonane pomyślnie.
Dlatego musimy użyć sp_update_jobstep
aby zaktualizować krok 1, aby przejść do kroku 2 po pomyślnym zakończeniu.
Możemy również określić, co zrobić, jeśli krok 1 się nie powiedzie.
USE msdb;
EXEC sp_update_jobstep
@job_name = N'SqlAgentTest',
@step_id = 1,
@on_success_action = 3,
@on_fail_action = 3;
W tym przypadku określiłem, że powinien przejść do następnego kroku, zarówno jeśli się powiedzie, jak i jeśli się nie powiedzie.
Wartości, które możesz podać na adres @on_success_action
i @on_fail_action
są następujące:
1 | Zakończ z sukcesem. Jest to ustawienie domyślne dla @on_success_action . |
2 | Zakończ z niepowodzeniem. Jest to ustawienie domyślne dla @on_fail_action . |
3 | Przejdź do następnego kroku. |
4 | Przejdź do kroku (ID). W tym miejscu podajesz identyfikator kroku, do którego chcesz przejść zadanie. |
Wyświetl etapy pracy
Możesz użyć sp_help_job
aby uzyskać informacje o zadaniach SQL Server Agent w systemie.
Możesz go używać z parametrami lub bez, ale aby uzyskać szczegóły etapu zadania, musisz podać nazwę lub identyfikator zadania.
Możemy go użyć, aby zobaczyć oba etapy pracy, które stworzyliśmy dla pracy.
Tak:
EXEC sp_help_job
@job_name = 'SqlAgentTest';
Oto, jak wygląda wynik podczas wykonywania go w programie SSMS:
Oto przykład kodu przy użyciu identyfikatora:
EXEC sp_help_job
@job_id = '343D9F2A-070A-4367-BF69-4248FFF57D70';
Używając identyfikatora, możesz pominąć nazwę parametru, jeśli chcesz.
Przykład:
EXEC sp_help_job '343D9F2A-070A-4367-BF69-4248FFF57D70';
Możesz także użyć sp_help_jobstep
w ten sam sposób, aby zwrócić tylko kroki zadania (bez wszystkich innych informacji o zadaniu). Akceptuje nazwę lub identyfikator zadania, a także opcjonalną nazwę kroku lub identyfikator.
Pełna składnia
Pełna składnia sp_add_jobstep
idzie tak:
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' } ]
Zobacz dokumentację Microsoft dla sp_add_jobstep
dla wyjaśnienia każdego parametru, a także wartości, które każdy akceptuje.
Pełna składnia sp_update_jobstep
idzie tak:
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' }
Zobacz dokumentację Microsoft dla sp_update_jobstep
dla wyjaśnienia każdego parametru, a także wartości, które każdy akceptuje.