Başka bir iş içindeki SQL Server işini çağırma


11

Başka bir işte çalışmak için SQL Server işini çağırmak mümkün mü?

İş 1'in tüm adımlarını İş 2'ye ekleyebileceğimizi biliyorum, ama bunu yapmamayı tercih ediyorum. Birincisi, İş 2 zaten oldukça büyük ve ikinci olarak işler arasındaki adımları kopyalamak için bir kopyala yapıştırma seçeneği bulamadım, bu yüzden adımları manuel olarak eklemek zaman alıcı olurdu.

Herhangi bir öneri takdir.

Yanıtlar:


7
  • Adımlarını eklemek istediğiniz işe sağ tıklayın ve "Komut Dosyası İşi-> Yeni sorgu penceresine oluştur" u seçin, ortaya çıkan komut dosyasında bu biçime sahip tüm bölümleri arayın
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
  • Yeni bir sorgu penceresi açın ve şunu çalıştırın:
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

seçenek 1

Job2'de, TSQL Komutu türünde bir iş adımı oluşturun. İçeriklerde, mevcut işi çalıştırmasını sağlayın ( sp_start_job )

EXECUTE msdb.dbo.sp_start_job 'Job1'

Bu, eşzamansız olarak çalışacaktır, bu nedenle depolanan yordamı çağırdıktan sonra, geri dönecek ve işteki bir sonraki adımı gerçekleştirecektir. Başlatılan işin tamamlanmasını beklemez. Aranan iş başarısız olursa, çağıran işe geri dönmeyecektir.

seçenek 2

Job1'e sağ tıklayın ve yeni sorgu penceresine komut dosyası ekleyin. Bunu Job2 ile tekrarlayın ve sonra iş adımlarını 1'den 2'ye gerektiği gibi / gerektiği kadar geçirin. Çarkı yeniden oluşturmaktan çok daha az tıklama ve umarım daha az hata eğilimli.


Cevabın için teşekkürler. Seçenek 2'ye gitmemiz gerekiyor gibi görünüyor. Her iki iş için de komut dosyaları oluşturmalı ve sonra job2 adımlarını job1 sonuna eklemeliyim demek istiyorsun? Bu doğru mu?
Sky

6

Stackoverflow'dan (mafafu)

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

Bu, ilk işin akşam geç saatlerde yürütülmesine dayanan ikinci bir işin (ertesi günün erken saatlerinde) yürütülmesini geciktirmemiz gereken bizim için yararlı oldu.
James D

Bir SYNC (Günlük) ve Artımlı (Saatlik) işler yürütüyorum ve bu, Artımlı'yı kontrol etmeme ve SYNC'yi çalıştırmak için bitene kadar beklememe yardımcı oldu.
snp.it
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.