W poprzednim artykule o tworzeniu zadania SQL Server Agent za pomocą T-SQL zademonstrowałem, jak utworzyć zadanie w jednym kroku.
W tym artykule pokażę, jak utworzyć pracę w wielu krokach.
Przykład
Podczas tworzenia zadania agenta SQL Server za pomocą T-SQL należy użyć kilku procedur przechowywanych. Dzieje się tak, ponieważ każda część jest traktowana niezależnie od pozostałych. Na przykład sp_add_job
procedura tworzy zadanie, a sp_add_jobstep
procedura tworzy krok w tym zadaniu.
Kiedy tworzysz zadanie, które ma więcej niż jeden krok, musisz wywołać sp_add_jobstep
wiele razy, każde połączenie definiuje inny krok.
Ponadto, jeśli chcesz, aby zadanie przechodziło przez kolejne kroki (i nie opuszczało zadania po pierwszym kroku), musisz to określić podczas wywoływania procedury.
Oto przykład, który to wszystko robi.
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
Ten kod tworzy zadanie z dwoma etapami zadania. Tworzy również nowy harmonogram, dołącza to zadanie do harmonogramu, a następnie kieruje zadanie na lokalny serwer.
Część, która tworzy etapy pracy, jest następująca:
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
W pierwszym wywołaniu część, która idzie @on_success_action = 3
to sprawia, że praca jest kontynuowana do następnego kroku.
Domyślna wartość to 1
, co oznacza, że zadanie zostanie zamknięte po zakończeniu pierwszego kroku (co określiliśmy w drugim kroku). Więc gdybyśmy nie uwzględnili @on_success_action = 3
część w pierwszym kroku, zadanie zakończy się bez przechodzenia do następnego kroku.
Możesz także określić @on_fail_action
, który określa, co się stanie, jeśli ten krok 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.