sql >> Databáze >  >> RDS >> Sqlserver

Vytvoření vícekrokové úlohy SQL Server Agent (T-SQL)

V předchozím článku o vytvoření úlohy SQL Server Agent pomocí T-SQL jsem ukázal, jak vytvořit úlohu v jediném kroku.

V tomto článku vám ukážu, jak vytvořit úlohu s několika kroky.

Příklad

Když vytvoříte úlohu SQL Server Agent pomocí T-SQL, musíte použít několik uložených procedur. Je to proto, že s každou částí se zachází nezávisle na ostatních. Například sp_add_job procedura vytvoří úlohu a sp_add_jobstep procedura vytvoří krok v této úloze.

Když vytvoříte úlohu, která má více než jeden krok, musíte zavolat sp_add_jobstep vícekrát, přičemž každé volání definuje jiný krok.

Také, pokud chcete, aby úloha procházela jednotlivými kroky (a neukončovala úlohu po prvním kroku), budete to muset zadat při volání procedury.

Zde je příklad, který to všechno umí.

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

Tento kód vytvoří úlohu se dvěma kroky úlohy. Vytvoří také nový plán, připojí tuto úlohu k plánu a poté zacílí úlohu na místním serveru.

Část, která vytváří kroky úlohy, je tato:

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

V prvním volání část, která jde @on_success_action = 3 je to, co přiměje práci pokračovat k dalšímu kroku.

Výchozí hodnota je 1 , což znamená, že úloha bude ukončena po dokončení prvního kroku (což jsme specifikovali ve druhém kroku). Pokud bychom tedy nezahrnuli @on_success_action = 3 v prvním kroku by se úloha ukončila, aniž by se postoupilo k dalšímu kroku.

Můžete také zadat @on_fail_action , který určuje, co se stane, pokud tento krok selže.

Hodnoty, které můžete poskytnout @on_success_action a @on_fail_action jsou následující:

1 Skončit s úspěchem. Toto je výchozí hodnota pro @on_success_action .
2 Ukončit se selháním. Toto je výchozí nastavení pro @on_fail_action .
3 Přejděte na další krok.
4 Přejděte na krok (ID). Zde zadáte ID kroku, ke kterému chcete, aby úloha postoupila.

Zobrazit kroky úlohy

Můžete použít sp_help_job získat informace o úlohách SQL Server Agent v systému.

Můžete ji použít s parametry nebo bez nich, ale abyste získali podrobnosti o kroku úlohy, musíte zadat název nebo ID úlohy.

Můžeme jej použít k zobrazení obou kroků úlohy, které jsme pro úlohu vytvořili.

Asi takto:

EXEC sp_help_job 
	@job_name = 'SqlAgentTest';

Takto vypadá výsledek při jeho spuštění v SSMS:

Zde je příklad kódu při použití ID:

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

Při použití ID můžete název parametru vynechat, chcete-li.

Příklad:

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

Můžete také použít sp_help_jobstep stejným způsobem vrátit pouze kroky úlohy (bez všech dalších informací o zakázce). To přijímá název úlohy nebo ID, stejně jako volitelný název kroku nebo ID.

Úplná syntaxe

Úplná syntaxe sp_add_jobstep vypadá takto:

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

Viz dokumentaci společnosti Microsoft pro sp_add_jobstep pro vysvětlení každého parametru a také hodnot, které každý přijímá.


  1. Vyrovnávání zatížení databáze pomocí ProxySQL a AWS Aurora

  2. Materializované zobrazení vs. tabulky:Jaké jsou výhody?

  3. ORA-12514 TNS:listener aktuálně neví o službě požadované v deskriptoru připojení

  4. Název tabulky jako proměnná