Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Dodaj krok zadania do istniejącego zadania agenta serwera SQL (T-SQL)

Podczas tworzenia zadania agenta SQL Server za pomocą T-SQL, używasz sp_add_jobstep procedura składowana, aby dodać każdy krok zadania.

Jeśli kiedykolwiek będziesz musiał dodać nowy krok do tego zadania, możesz użyć sp_add_jobstep jeszcze raz, aby dodać nowy krok zadania.

Ale może być również konieczne zmodyfikowanie istniejącego kroku, w zależności od tego, jak chcesz, aby zadanie przebiegało przez poszczególne kroki.

Przykład

W tym przykładzie tworzymy zadanie z jednym krokiem zadania, a następnie używamy sp_add_jobstep aby dodać drugi krok do tej pracy. Następnie używamy sp_update_jobstep aby zaktualizować pierwszy etap zadania, aby przeszedł do drugiego etapu zadania zaraz po jego zakończeniu.

Utwórz zadanie

Najpierw utwórz zadanie w jednym kroku:

USE msdb;  
GO  
EXEC sp_add_job  
    @job_name = N'SqlAgentTest',
    @description = N'Insert data.',
    @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())';
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';
GO

Żeby było jasne, następująca część była częścią, która dodała ten krok:

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())';

Dodaj nowy etap pracy

Możemy teraz użyć sp_add_jobstep ponownie, aby dodać nowy krok do zadania.

USE msdb;
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())';

To dodaje drugi krok do zadania.

Zaktualizuj przepływ pracy

Jeśli chcesz, aby zadanie automatycznie przechodziło od kroku 1 do kroku 2, musisz to określić w kroku 1.

Domyślną akcją dla każdego etapu zadania jest pomyślne zakończenie zadania, gdy tylko się powiedzie. Jeśli krok się nie powiedzie, domyślną akcją jest zakończenie z niepowodzeniem.

Tak więc, ponieważ nasze zadanie jest obecnie aktualne, zadanie zakończy się, gdy tylko zakończy się krok 1 (bez uruchamiania kroku 2), a historia zgłosi, że zadanie zostało wykonane pomyślnie.

Dlatego musimy użyć sp_update_jobstep aby zaktualizować krok 1, aby przejść do kroku 2 po pomyślnym zakończeniu.

Możemy również określić, co zrobić, jeśli krok 1 się nie powiedzie.

USE msdb;
EXEC sp_update_jobstep  
    @job_name = N'SqlAgentTest',  
    @step_id = 1,  
    @on_success_action = 3,  
    @on_fail_action = 3;

W tym przypadku określiłem, że powinien przejść do następnego kroku, zarówno jeśli się powiedzie, jak i jeśli 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.

Pełna składnia sp_update_jobstep idzie tak:

sp_update_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 =] success_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_update_jobstep dla wyjaśnienia każdego parametru, a także wartości, które każdy akceptuje.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak ORIGINAL_DB_NAME() działa w SQL Server

  2. Wyświetl listę kont skojarzonych z profilem poczty bazy danych w SQL Server

  3. Zbiorcze wstawianie częściowo cytowanego pliku CSV w programie SQL Server

  4. Jak działa funkcja PATINDEX() w SQL Server (T-SQL)

  5. Sortowanie losowe serwera SQL