I en tidligere artikel om oprettelse af et SQL Server Agent-job med T-SQL demonstrerede jeg, hvordan man opretter et job med et enkelt trin.
I denne artikel viser jeg dig, hvordan du opretter et job med flere trin.
Eksempel
Når du opretter et SQL Server Agent-job med T-SQL, skal du bruge flere lagrede procedurer. Dette skyldes, at hver del behandles uafhængigt af de andre. For eksempel, sp_add_job
proceduren opretter jobbet og sp_add_jobstep
procedure skaber et trin i det job.
Når du opretter et job, der har mere end ét trin, skal du ringe til sp_add_jobstep
flere gange, hvert opkald definerer et andet trin.
Hvis du ønsker, at jobbet skal gå videre gennem trinene (og ikke afslutte jobbet efter det første trin), skal du angive det, når du kalder proceduren.
Her er et eksempel, der gør alt dette.
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
Den kode opretter et job med to jobtrin. Den opretter også en ny tidsplan, vedhæfter jobbet til tidsplanen og målretter derefter jobbet mod den lokale server.
Den del, der skaber jobtrinene, er denne:
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
I det første kald, den del, der går @on_success_action = 3
er det, der får jobbet til at fortsætte til næste trin.
Standardværdien er 1
, hvilket betyder, at jobbet afsluttes efter afslutningen af det første trin (hvilket er, hvad vi specificerede i det andet trin). Så hvis vi ikke havde inkluderet @on_success_action = 3
del i det første trin, ville jobbet afslutte uden at gå videre til næste trin.
Du kan også angive @on_fail_action
, som specificerer, hvad der vil ske, hvis det trin mislykkes.
De værdier, du kan angive til @on_success_action
og @on_fail_action
er som følger:
1 | Slut med succes. Dette er standarden for @on_success_action . |
2 | Afslut med fejl. Dette er standarden for @on_fail_action . |
3 | Gå til næste trin. |
4 | Gå til trin (ID). Det er her, du angiver ID'et for et trin, som du ønsker, at jobbet skal gå videre til. |
Se jobtrinnene
Du kan bruge sp_help_job
for at få oplysninger om SQL Server Agent-jobbene i systemet.
Du kan bruge det med eller uden parametre, men for at få jobtrindetaljerne skal du angive jobnavnet eller ID.
Vi kan bruge det til at se begge jobtrin, som vi har oprettet til jobbet.
Sådan:
EXEC sp_help_job
@job_name = 'SqlAgentTest';
Her er, hvordan resultatet ser ud, når det udføres i SSMS:
Her er et eksempel på koden, når du bruger ID'et:
EXEC sp_help_job
@job_id = '343D9F2A-070A-4367-BF69-4248FFF57D70';
Når du bruger ID'et, kan du udelade parameternavnet, hvis du ønsker det.
Eksempel:
EXEC sp_help_job '343D9F2A-070A-4367-BF69-4248FFF57D70';
Du kan også bruge sp_help_jobstep
på samme måde for at returnere bare jobtrinene (uden al den anden info om jobbet). Dette accepterer jobnavnet eller ID'et samt et valgfrit trinnavn eller ID.
Fuld syntaks
Den fulde syntaks for sp_add_jobstep
går sådan her:
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' } ]
Se Microsofts dokumentation for sp_add_jobstep
for en forklaring af hver parameter, samt de værdier, som hver accepterer.