Виклик завдання SQL Server у межах іншого завдання


11

Чи можна викликати завдання SQL Server для виконання іншого завдання?

Я знаю, що ми можемо додати всі кроки завдання 1 до роботи 2, але я вважаю за краще не робити цього. По-перше, робота 2 вже досить велика, а по-друге, я не міг знайти опцію копіювання-вставки для копіювання кроків між завданнями, тому додати ці кроки потрібно багато часу.

Будь-яка пропозиція цінується.

Відповіді:


7
  • Клацніть правою кнопкою миші на роботу, чиї кроки ви хочете додати, і виберіть "Сценарій роботи як-> Створити до нового вікна запиту", в отриманому скрипті шукайте всі розділи, що мають цей формат
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'<stepname>', 
  @step_id=1, 
  @cmdexec_success_code=0, 
  @on_success_action=3, 
  @on_success_step_id=0, 
  @on_fail_action=2, 
  @on_fail_step_id=0, 
  @retry_attempts=0, 
  @retry_interval=0, 
  @os_run_priority=0, @subsystem=N'TSQL', 
  @command=N'<code>', 
  @database_name=N'', 
  @flags=0
  • Відкрийте нове вікно запитів і запустіть це:
DECLARE @jobId BINARY(16)
    SET @jobId = (SELECT job_id FROM msdb.dbo.sysjobs WHERE name = '<job name, to which you want to copy the steps>')

-- Followed by all the msdb.dbo.sp_add_jobstep from the script that scripted out in the earlier step

    EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'<stepname>', 
      @step_id=1, 
      @cmdexec_success_code=0, 
      @on_success_action=3, 
      @on_success_step_id=0, 
      @on_fail_action=2, 
      @on_fail_step_id=0, 
      @retry_attempts=0, 
      @retry_interval=0, 
      @os_run_priority=0, @subsystem=N'TSQL', 
      @command=N'<code>', 
      @database_name=N'', 
      @flags=0

15

Варіант 1

У Job2 створіть крок завдання типу TSQL Command. У вмісті слід виконати існуючу роботу ( sp_start_job )

EXECUTE msdb.dbo.sp_start_job 'Job1'

Це буде запускатися асинхронно, тому після запуску виклику збереженої процедури воно повернеться і виконає наступний крок у роботі. Він не чекатиме завершення розпочатої роботи. Якщо зателефоноване завдання не вдасться, воно не повернеться до завдання, що викликає.

Варіант 2

Клацніть правою кнопкою миші Job1 та скрипт до нового вікна запитів. Повторіть це з Job2, а потім вкажіть кроки завдання з 1 на 2, як / де потрібно. Набагато менше клацання, ніж відтворення колеса і, сподіваємось, менше схильних до помилок.


Дякуємо за Ваш відповідь. Здається, ми повинні піти на варіант 2. Я не зовсім впевнений, чи правильно я це зрозумів. Ви маєте на увазі, що я повинен створити сценарії для обох завдань, а потім додати кроки завдання2 до кінця завдання1? Це так?
Небо

6

Від stackoverflow (мафафу)

WAITFOR DELAY '00:00:02';
while exists (select * from msdb.dbo.sysjobs j 
                inner join msdb.dbo.sysjobactivity a on j.job_id = a.job_id 
                where name = 'Job 1' 
                and stop_execution_date is null and start_execution_date is not null)
begin
    PRINT 'Waiting...'
    WAITFOR DELAY '00:00:02';   
end

Це було корисно для нас, коли нам потрібно було відкласти виконання другого завдання (яке працює на наступний день) на основі виконання першого завдання пізно ввечері.
Джеймс Д

Я виконую завдання SYNC (щоденно) та інкрементально (щогодини), і це допомогло мені зберегти чек на інкрементальний і чекати, поки він закінчиться, щоб запустити SYNC.
snp.it
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.