मुझे कई SQL सर्वर एजेंट कार्य मिले हैं जो क्रमिक रूप से चलने चाहिए। उन नौकरियों का एक अच्छा अवलोकन रखने के लिए जिन्हें मुझे निष्पादित करना चाहिए मैंने एक मुख्य नौकरी बनाई है जो कॉल के साथ अन्य नौकरियों को कॉल करती है EXEC msdb.dbo.sp_start_job N'TEST1'
। sp_start_job
खत्म तुरन्त (नौकरी चरण 1), लेकिन फिर मैं प्रतीक्षा करने के लिए अपने मुख्य काम चाहते हैं जब तक काम TEST1
अगला काम कॉल करने से पहले समाप्त हो गया है।
इसलिए मैंने इस छोटी सी स्क्रिप्ट को लिखा है जो कि नौकरी (नौकरी चरण 2) के ठीक बाद निष्पादित करना शुरू करता है, और मुख्य नौकरी को तब तक इंतजार करने के लिए मजबूर करता है जब तक कि उप-नौकरी समाप्त न हो जाए:
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;
यह काफी अच्छी तरह से काम करता है। लेकिन मुझे समझदारी मिली और / या सुरक्षित ( WHILE 1 = 1
?) समाधान संभव होना चाहिए।
मैं निम्नलिखित चीजों के बारे में उत्सुक हूं, आशा है कि आप मुझे कुछ जानकारी प्रदान कर सकते हैं:
- इस दृष्टिकोण के साथ क्या समस्याएं हैं?
- क्या आप ऐसा करने का बेहतर तरीका सुझा सकते हैं?
(मैंने इस सवाल को StackOverflow में सबसे पहले पोस्ट किया , क्योंकि मैं कोड के सुधार पर ध्यान केंद्रित कर रहा था। फिर भी मान्य है। लेकिन मेरा अनुमान है कि यहां के लोग सामान्य तौर पर यह कहने के लिए होशियार होंगे कि मुझे ऐसा करने की कोशिश क्यों नहीं करनी चाहिए। ' मी अभी कर रहा है, या अच्छे विकल्प प्रदान कर रहा है।)
EDIT (25 जुलाई)
स्पष्ट रूप से मेरी स्क्रिप्ट के साथ बहुत अधिक गलत नहीं है, इसके साथ समस्याओं की ओर इशारा करते हुए जवाबों की कम संख्या के अनुसार :-) इस तरह की स्क्रिप्टिंग का विकल्प एक उपकरण का उपयोग करना प्रतीत होता है जो इन के लिए डिज़ाइन किया गया है कार्य (जैसे SQL संतरी इवेंट मैनेजर या ...) - या इस तरह के टूल को स्वयं लिखने के लिए। हम अपनी मौजूदा कंपनी में ऐसा कोई उपकरण नहीं खरीदेंगे, इसलिए अभी मैं सिर्फ स्क्रिप्ट के साथ रहूंगा।