sql >> Database >  >> RDS >> Sqlserver

Een SQL Server Agent-taak in meerdere stappen (T-SQL) maken

In een vorig artikel over het maken van een SQL Server Agent-taak met T-SQL, heb ik laten zien hoe u in één stap een taak kunt maken.

In dit artikel laat ik je zien hoe je een taak maakt met meerdere stappen.

Voorbeeld

Wanneer u een SQL Server Agent-taak maakt met T-SQL, moet u verschillende opgeslagen procedures gebruiken. Dit komt omdat elk onderdeel onafhankelijk van de andere wordt behandeld. Bijvoorbeeld de sp_add_job procedure maakt de taak aan, en de sp_add_jobstep procedure creëert een stap in die taak.

Wanneer u een taak maakt die uit meer dan één stap bestaat, moet u sp_add_jobstep aanroepen meerdere keren, waarbij elke oproep een andere stap definieert.

Als u wilt dat de taak de stappen doorloopt (en de taak niet verlaat na de eerste stap), moet u dat specificeren wanneer u de procedure aanroept.

Hier is een voorbeeld dat dat allemaal doet.

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

Die code creëert een taak met twee taakstappen. Het maakt ook een nieuwe planning aan, koppelt die taak aan de planning en richt de taak vervolgens op de lokale server.

Het deel dat de taakstappen maakt, is dit:

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

In de eerste oproep, het deel dat gaat @on_success_action = 3 is wat ervoor zorgt dat het werk doorgaat naar de volgende stap.

De standaardwaarde is 1 , wat betekent dat de taak stopt na voltooiing van de eerste stap (wat we in de tweede stap hebben gespecificeerd). Dus als we de @on_success_action = 3 . niet hadden opgenomen deel aan de eerste stap, zou de taak stoppen zonder door te gaan naar de volgende stap.

U kunt ook @on_fail_action specify opgeven , die specificeert wat er zal gebeuren als die stap mislukt.

De waarden die u kunt verstrekken aan @on_success_action en @on_fail_action zijn als volgt:

1 Stop met succes. Dit is de standaardinstelling voor @on_success_action .
2 Afsluiten met fout. Dit is de standaardinstelling voor @on_fail_action .
3 Ga naar de volgende stap.
4 Ga naar stap (ID). Hier geeft u de ID op van een stap waarvoor u de taak wilt laten verlopen.

Bekijk de taakstappen

U kunt sp_help_job . gebruiken om informatie te krijgen over de SQL Server Agent-taken in het systeem.

U kunt het met of zonder parameters gebruiken, maar om de details van de taakstap te krijgen, moet u de taaknaam of ID opgeven.

We kunnen het gebruiken om beide taakstappen te zien die we voor de taak hebben gemaakt.

Zoals dit:

EXEC sp_help_job 
	@job_name = 'SqlAgentTest';

Hier is hoe het resultaat eruit ziet wanneer het wordt uitgevoerd in SSMS:

Hier is een voorbeeld van de code bij gebruik van de ID:

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

Als u de ID gebruikt, kunt u desgewenst de parameternaam weglaten.

Voorbeeld:

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

U kunt ook sp_help_jobstep . gebruiken op dezelfde manier om alleen de taakstappen terug te geven (zonder alle andere informatie over de taak). Dit accepteert de taaknaam of ID, evenals een optionele stapnaam of ID.

Volledige syntaxis

De volledige syntaxis van sp_add_jobstep gaat als volgt:

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' } ]

Zie de documentatie van Microsoft voor sp_add_jobstep voor een uitleg van elke parameter, evenals de waarden die elke parameter accepteert.


  1. Column Store-plannen

  2. MySQL - Gegevens selecteren op tekenreekslengte

  3. Veroorzaakt door:java.lang.NoSuchMethodError:org.postgresql.core.BaseConnection.getEncoding()Lorg/postgresql/core/Encoding;

  4. Drop vs Truncate in SQL