sql >> Databasteknik >  >> RDS >> Sqlserver

Skapa ett flerstegs SQL Server Agent Job (T-SQL)

I en tidigare artikel om att skapa ett SQL Server Agent-jobb med T-SQL, visade jag hur man skapar ett jobb med ett enda steg.

I den här artikeln visar jag dig hur du skapar ett jobb med flera steg.

Exempel

När du skapar ett SQL Server Agent-jobb med T-SQL måste du använda flera lagrade procedurer. Detta beror på att varje del behandlas oberoende av de andra. Till exempel, sp_add_job proceduren skapar jobbet och sp_add_jobstep proceduren skapar ett steg i det jobbet.

När du skapar ett jobb som har mer än ett steg måste du anropa sp_add_jobstep flera gånger, varje samtal definierar ett annat steg.

Om du vill att jobbet ska gå vidare genom stegen (och inte avsluta jobbet efter det första steget), måste du ange det när du anropar proceduren.

Här är ett exempel som gör allt detta.

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 koden skapar ett jobb med två jobbsteg. Den skapar också ett nytt schema, bifogar det jobbet till schemat och riktar sedan jobbet mot den lokala servern.

Den del som skapar jobbstegen är denna:

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örsta anropet, delen som går till @on_success_action = 3 är det som får jobbet att fortsätta till nästa steg.

Standardvärdet är 1 , vilket innebär att jobbet kommer att avslutas efter att det första steget har slutförts (vilket är vad vi angav i det andra steget). Så om vi inte hade inkluderat @on_success_action = 3 del i det första steget, skulle jobbet avslutas utan att gå vidare till nästa steg.

Du kan också ange @on_fail_action , som anger vad som kommer att hända om det steget misslyckas.

Värdena som du kan ange till @on_success_action och @on_fail_action är följande:

1 Avsluta med framgång. Detta är standard för @on_success_action .
2 Avsluta med misslyckande. Detta är standard för @on_fail_action .
3 Gå till nästa steg.
4 Gå till steg (ID). Det är här du anger ID för ett steg som du vill att jobbet ska gå vidare till.

Visa jobbstegen

Du kan använda sp_help_job för att få information om SQL Server Agent-jobben i systemet.

Du kan använda det med eller utan parametrar, men för att få detaljerna om jobbsteget måste du ange jobbets namn eller ID.

Vi kan använda den för att se båda jobbstegen som vi skapade för jobbet.

Så här:

EXEC sp_help_job 
	@job_name = 'SqlAgentTest';

Så här ser resultatet ut när du kör det i SSMS:

Här är ett exempel på koden när du använder ID:t:

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

När du använder ID:t kan du utelämna parameternamnet om du vill.

Exempel:

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

Du kan också använda sp_help_jobstep på samma sätt för att returnera bara jobbstegen (utan all annan info om jobbet). Detta accepterar jobbets namn eller ID, såväl som ett valfritt stegnamn eller ID.

Full syntax

Den fullständiga syntaxen för sp_add_jobstep går så här:

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 för sp_add_jobstep för en förklaring av varje parameter, såväl som de värden som var och en accepterar.


  1. Laravel Eloquent välj alla rader med max create_at

  2. Lägg till en kolumn i en tabell i SQL

  3. Få positionen för en karaktär i en sträng i SQLite med Instr()

  4. Stänga av och starta Oracle-instansen