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

Utwórz wieloetapowe zadanie agenta SQL Server (T-SQL)

W poprzednim artykule o tworzeniu zadania SQL Server Agent za pomocą T-SQL zademonstrowałem, jak utworzyć zadanie w jednym kroku.

W tym artykule pokażę, jak utworzyć pracę w wielu krokach.

Przykład

Podczas tworzenia zadania agenta SQL Server za pomocą T-SQL należy użyć kilku procedur przechowywanych. Dzieje się tak, ponieważ każda część jest traktowana niezależnie od pozostałych. Na przykład sp_add_job procedura tworzy zadanie, a sp_add_jobstep procedura tworzy krok w tym zadaniu.

Kiedy tworzysz zadanie, które ma więcej niż jeden krok, musisz wywołać sp_add_jobstep wiele razy, każde połączenie definiuje inny krok.

Ponadto, jeśli chcesz, aby zadanie przechodziło przez kolejne kroki (i nie opuszczało zadania po pierwszym kroku), musisz to określić podczas wywoływania procedury.

Oto przykład, który to wszystko robi.

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

Ten kod tworzy zadanie z dwoma etapami zadania. Tworzy również nowy harmonogram, dołącza to zadanie do harmonogramu, a następnie kieruje zadanie na lokalny serwer.

Część, która tworzy etapy pracy, jest następująca:

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

W pierwszym wywołaniu część, która idzie @on_success_action = 3 to sprawia, że ​​praca jest kontynuowana do następnego kroku.

Domyślna wartość to 1 , co oznacza, że ​​zadanie zostanie zamknięte po zakończeniu pierwszego kroku (co określiliśmy w drugim kroku). Więc gdybyśmy nie uwzględnili @on_success_action = 3 część w pierwszym kroku, zadanie zakończy się bez przechodzenia do następnego kroku.

Możesz także określić @on_fail_action , który określa, co się stanie, jeśli ten krok 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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Napraw komunikat o błędzie 4151 „Typ pierwszego argumentu do wartości NULLIF nie może być stałą NULL, ponieważ typ pierwszego argumentu musi być znany” w programie SQL Server

  2. SQL Pivot z wieloma kolumnami

  3. Idź, gdy sterownik SQL Server nie może się pomyślnie połączyć, logowanie nie powiodło się

  4. Jak skopiować rekord w tabeli SQL, ale zamienić unikalny identyfikator nowego wiersza?

  5. SQL Server sprawdza rozróżnianie wielkości liter?