मैं एक संग्रहीत प्रक्रिया है जो अपने आप क्रम में अन्य संग्रहित प्रक्रियाओं की एक सूची कॉल:संग्रहित प्रक्रिया - मजबूर कर निष्पादन आदेश
CREATE PROCEDURE [dbo].[prSuperProc]
AS
BEGIN
EXEC [dbo].[prProc1]
EXEC [dbo].[prProc2]
EXEC [dbo].[prProc3]
--etc
END
हालांकि, मैं कभी कभी अपने टेबल, prProc2, द्वारा उत्पन्न में कुछ अजीब परिणाम हो जो prProc1 द्वारा उत्पन्न परिणामों पर निर्भर है। यदि मैं मैन्युअल रूप से prProc1, prProc2, prProc3 निष्पादित करता हूं तो सब कुछ ठीक है। ऐसा प्रतीत होता है कि जब मैं शीर्ष-स्तरीय प्रक्रिया चलाता हूं, तो Proc1 पूरा होने से पहले Proc2 निष्पादित किया जा रहा है और इसके परिणाम डीबी में किए गए हैं। यह हमेशा गलत नहीं होता है, लेकिन ऐसा लगता है कि Proc1 के पास लंबे निष्पादन का समय है (इस मामले में ~ 10s)।
मैं prSuperProc को कैसे बदलूं जैसे कि प्रत्येक प्रक्रिया केवल पिछली प्रक्रिया पूरी होने और प्रतिबद्ध होने के बाद निष्पादित होती है? लेन-देन? अतिरिक्त विस्तार के लिए
संपादित करें:
जो एक स्तंभ जो डिफ़ॉल्ट रूप से अशक्त है मेरी DB में एक टेबल है। prProc1 इस कॉलम को पॉप्युलेट करने के लिए इस तालिका पर अद्यतन विवरणों का एक सेट करता है। prProc2 फिर इस कॉलम के मानों के आधार पर सारांश डेटा को द्वितीयक तालिका में सम्मिलित करता है।
जब मैं सुपर प्रक्रिया चलाता हूं, तो मैं (कभी-कभी) देख रहा हूं कि पहली तालिका में परिणाम prProc1 द्वारा सही ढंग से गणना की जाती हैं, लेकिन prProc2 ने परिणाम उत्पन्न किए हैं जैसे कॉलम सभी नल था। यदि मैं मैन्युअल रूप से prProc2 चलाता हूं, तो सारांश डेटा सही ढंग से उत्पन्न होता है।
मैं कुछ आवरण proc केवल किसी भी समय एक बार चलाया जाता है कर रहा हूँ - यह केवल इस समय मेरे द्वारा प्रयोग किया जाता है! मैं सुझाव नहीं दे रहा हूं कि वे आदेश से बाहर हो रहे हैं, बस Proc1 द्वारा किए गए अपडेट पूरी तरह से प्रतिबद्ध नहीं हैं जब Proc2 प्रारंभ होता है, और मैंने बग को हटाने के लिए मैन्युअल रूप से निष्पादित करके इसकी पुष्टि की है। – meepmeep
@ मिपमिप, इन प्रक्रियाओं (रैपर समेत) में और फिर प्रिंटर में 'PRINT' prprroc1'' और 'प्रिंटर' समाप्त prprroc1'' टाइप स्टेटमेंट्स जोड़ें और फिर एसएसएमएस में 'EXEC [dbo] चलाएं। [PrSuperProc] 'पैरामीटर के साथ तो क्या होता है यह देखने के लिए Proc1 का एक लंबा निष्पादन समय होता है (इस मामले में ~ 10s)। –
मैंने इसे अंदर रखा है। हमेशा के रूप में, बग पुनरावृत्ति करने से इंकार कर रहा है, इसलिए मैं इस क्यू को तब तक खोल दूंगा जब तक यह फिर से न हो और नतीजे देखें। धन्यवाद! – meepmeep