नहीं मिला है मैंने एक संग्रहित प्रक्रिया बनाई है जो डेटा को संशोधित करने के लिए कई आदेश चलाती है। अगर सबकुछ सफल होता है तो मैं केवल लेनदेन करना चाहता हूं। मैं नीचे ढंग से एक कोशिश पकड़ ब्लॉक का उपयोग (जहां असली बात में मेरा कैच ब्लॉक RAISERROR का उपयोग करता त्रुटि संदेश वापस जाने के लिए) द्वारा इस कर रहा हूँ:एसक्यूएल: कोशिश करें/कैच को किसी तालिका तक पहुंचने का प्रयास करते समय कोई त्रुटि नहीं मिलती है, जिसे
BEGIN TRY
BEGIN TRANSACTION
UPDATE Table1 SET MyVarcharColumn = 'test'
UPDATE Table2 SET MyBitColumn = 1
UPDATE Table3 SET MyIntColumn = 42
COMMIT TRANSACTION
END TRY
CATCH
ROLLBACK TRANSACTION
END CATCH
इस तरह मैं यह करना चाहते हैं काम करता है। यदि, उदाहरण के लिए, मैंने MyBitColumn को 1 के बजाय 'बी' पर सेट किया है, त्रुटि पकड़ी जाती है, कैच पर नियंत्रण प्रवाह होता है, और लेनदेन नहीं किया जाता है।
एक मुद्दा मैंने देखा है कि यदि कहें, तालिका 3 डेटाबेस में मौजूद नहीं है तो यह त्रुटियों (अमान्य वस्तु का नाम) त्रुटिपूर्ण है, लेकिन कैच ब्लॉक कभी निष्पादित नहीं होता है और लेनदेन खुला रहता है।
मैं किसी भी (दूरस्थ) संभावना का ख्याल रखने के लिए इसे संभालना चाहता हूं कि डेटाबेस संशोधित हो जाता है (या कुछ ऐसा होता है जहां यह संग्रहित प्रक्रिया ठीक से जोड़ दी जाती है, लेकिन तालिकाओं में से कोई नहीं है)।
मुझे इन त्रुटि मामलों को कैसे संभालना चाहिए?
- किसी भी मदद के लिए धन्यवाद।
धन्यवाद। यह उपयोगी है कि सेटिंग जो लेनदेन को वापस रोल करने का कारण बनती है। हालांकि, यह अभी भी त्रुटि के बाद कैच ब्लॉक में क्या निष्पादित नहीं करता है। यह मेरे आवेदन के लिए काम करता है (चूंकि त्रुटि किसी भी तरह से पारित हो जाती है) लेकिन अगर कोई यह सुनिश्चित करने की कोशिश कर रहा था कि कैच ब्लॉक अन्य कारणों से निष्पादित करता है तो यह ऐसा नहीं करेगा। – Luke
आह, समझ गया, वे उस मामले में उन प्रकार की त्रुटियों के लिए पकड़े नहीं गए हैं। धन्यवाद! – Luke