Saya punya beberapa pekerjaan Agen SQL Server yang harus dijalankan secara berurutan. Untuk menyimpan ikhtisar bagus tentang pekerjaan yang seharusnya dijalankan, saya telah menciptakan pekerjaan utama yang memanggil pekerjaan lain dengan panggilan EXEC msdb.dbo.sp_start_job N'TEST1'
. The sp_start_job
selesai langsung (Ayub Langkah 1), tapi kemudian saya ingin pekerjaan utama saya untuk menunggu sampai pekerjaan TEST1
selesai sebelum memanggil pekerjaan berikutnya.
Jadi saya telah menulis skrip kecil ini yang mulai dieksekusi tepat setelah pekerjaan dipanggil (Pekerjaan Langkah 2), dan memaksa pekerjaan utama untuk menunggu sampai sub pekerjaan selesai:
WHILE 1 = 1
BEGIN
WAITFOR DELAY '00:05:00.000';
SELECT *
INTO #jobs
FROM OPENROWSET('SQLNCLI', 'Server=TESTSERVER;Trusted_Connection=yes;',
'EXEC msdb.dbo.sp_help_job @job_name = N''TEST1'',
@execution_status = 0, @job_aspect = N''JOB''');
IF NOT (EXISTS (SELECT top 1 * FROM #jobs))
BEGIN
BREAK
END;
DROP TABLE #jobs;
END;
Ini cukup berhasil. Tetapi saya merasa solusi yang lebih cerdas dan / atau lebih aman ( WHILE 1 = 1
?) Harus dimungkinkan.
Saya ingin tahu tentang hal-hal berikut, harap Anda dapat memberi saya beberapa wawasan:
- Apa masalah dengan pendekatan ini?
- Bisakah Anda menyarankan cara yang lebih baik untuk melakukan ini?
(Saya memposting pertanyaan ini di StackOverflow terlebih dahulu, karena saya fokus pada peningkatan kode. Masih valid. Tapi tebakan saya adalah bahwa orang-orang di sini pada umumnya akan memiliki hal-hal yang lebih pintar untuk mengatakan tentang mengapa saya tidak boleh mencoba melakukan ini dengan cara saya ' saya melakukannya sekarang, atau memberikan alternatif yang baik.)
EDIT (25 Juli)
Tampaknya tidak terlalu banyak yang salah dengan skrip saya, berdasarkan pada rendahnya jumlah jawaban yang menunjukkan masalah dengan skrip itu :-) Alternatif dari skrip semacam ini adalah dengan menggunakan alat yang dirancang untuk ini tugas (seperti SQL Sentry Event Manager atau ...) - atau untuk menulis sendiri alat tersebut. Kami tidak akan membeli alat seperti itu di perusahaan saya saat ini, jadi untuk sekarang saya hanya akan tetap dengan skrip.