Memanggil pekerjaan SQL Server dalam pekerjaan lain

10

Apakah mungkin untuk memanggil pekerjaan SQL Server untuk dijalankan dalam pekerjaan lain?

Saya tahu kita bisa menambahkan semua langkah dari Ayub 1 ke Ayub 2, tetapi saya lebih memilih untuk tidak melakukannya. Pertama, Pekerjaan 2 sudah cukup besar dan kedua saya tidak bisa menemukan opsi salin-tempel untuk menyalin langkah di antara pekerjaan, jadi akan memakan waktu untuk menambahkan langkah-langkah secara manual.

Setiap saran sangat dihargai.

Langit
sumber

Jawaban:

7
  • Klik kanan pada pekerjaan yang langkahnya ingin Anda tambahkan dan pilih "Script Job As-> Buat ke jendela permintaan baru", di skrip yang dihasilkan lihat semua bagian yang memiliki format ini
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
  • Buka jendela permintaan baru dan jalankan ini:
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
Bebas keriput
sumber
14

Pilihan 1

Di Job2, buat langkah pekerjaan dari jenis Perintah TSQL. Dalam konten, minta ia menjalankan pekerjaan yang ada ( sp_start_job )

EXECUTE msdb.dbo.sp_start_job 'Job1'

Itu akan berjalan secara tidak sinkron, sehingga setelah mulai memanggil prosedur tersimpan, itu akan kembali dan melakukan langkah selanjutnya dalam pekerjaan. Itu tidak akan menunggu sampai pekerjaan mulai selesai. Jika pekerjaan yang dipanggil gagal, itu tidak akan meresap kembali ke pekerjaan yang memanggil.

pilihan 2

Klik kanan pada Job1 dan skrip ke jendela kueri baru. Ulangi itu dengan Job2 dan kemudian utas langkah-langkah pekerjaan dari 1 menjadi 2 jika diperlukan. Jauh lebih sedikit mengklik daripada menciptakan kembali roda dan semoga lebih sedikit kesalahan.

billinkc
sumber
Terima kasih untuk balasan Anda. Sepertinya kita harus memilih Opsi 2. Saya tidak yakin apakah saya memahaminya dengan benar. Apakah maksud Anda saya harus membuat skrip untuk kedua pekerjaan, dan kemudian menambahkan langkah-langkah job2 ke akhir pekerjaan1? Apakah itu benar?
Langit
6

Dari stackoverflow (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
Chris Harland
sumber
Ini berguna bagi kami, di mana kami perlu menunda pelaksanaan pekerjaan kedua (yang berjalan pada hari berikutnya berikutnya) berdasarkan pelaksanaan pekerjaan pertama di malam hari.
James D
Saya menjalankan pekerjaan SYNC (Harian) dan Inkremental (Per Jam) dan ini membantu saya untuk memeriksa Inkremental dan menunggu sampai selesai untuk menjalankan SYNC.
snp.it