एलेक्स कुजनेत्सोव ने अपनी पुस्तक डिफेंसिव डेटाबेस प्रोग्रामिंग (चैप्टर 8) में एक महान अध्याय है जिसमें टी-एसक्यूएल टीआरवाई ... कैटच, टी-एसक्यूएल लेनदेन और सेट एक्सएक्ट_एबेट सेटिंग्स, और क्लाइंट साइड एरर हैंडलिंग का उपयोग किया गया है। यह निर्णय लेने में आपको बहुत मदद करेगा कि आपको किन विकल्पों को पूरा करने की आवश्यकता है।
यह इस साइट पर मुफ्त में उपलब्ध है । मैं कंपनी के साथ किसी भी तरह से संबद्ध नहीं हूं, लेकिन मैं उस पुस्तक के हार्ड कॉपी संस्करण का मालिक हूं।
इस विषय पर बहुत कम विवरण हैं जो एलेक्स द्वारा बहुत अच्छी तरह से समझाया गया है।
निक के अनुरोध के अनुसार ... (लेकिन यह सब अध्याय में नहीं है)
स्केलिंग के संदर्भ में, आपको क्रूरतापूर्वक ईमानदार होने की आवश्यकता है कि कौन सी गतिविधियाँ db कोड में होनी चाहिए और कौन सी ऐप में होनी चाहिए। कभी ध्यान दें कि फास्ट-एक्ज़ीक्यूटिंग कोड प्रति विधि एकल चिंता के लिए डिजाइनिंग में वापस कैसे आता है?
संवाद करने का सबसे आसान तरीका कस्टम त्रुटि कोड (> 50,000) होगा। यह भी बहुत तेज है। इसका मतलब है कि आपको db कोड और ऐप कोड को सिंक में रखना होगा। कस्टम त्रुटि कोड के साथ, आप त्रुटि संदेश स्ट्रिंग में उपयोगी जानकारी भी वापस कर सकते हैं। क्योंकि उस स्थिति के लिए आपके पास एक त्रुटि कोड सख्ती से है, तो आप त्रुटि के डेटा प्रारूप के अनुरूप ऐप कोड में एक पार्सर लिख सकते हैं।
इसके अलावा, डेटाबेस में कौन से त्रुटि की स्थिति को पुन: प्रयास करने की आवश्यकता है? यदि आप X सेकंड के बाद पुन: प्रयास करना चाहते हैं, तो आप ऐप कोड में संभालना बेहतर समझते हैं ताकि लेन-देन अधिक से अधिक ब्लॉक न हो। यदि आप अभी तुरंत DML ऑपरेशन को फिर से सबमिट कर रहे हैं, तो इसे SP में दोहराना अधिक कुशल हो सकता है। हालांकि, ध्यान रखें कि आपको संभवतः एक कोड को पूरा करने के लिए कोड को डुप्लिकेट करना होगा या एसपी की एक परत जोड़ना होगा।
वास्तव में, यह वर्तमान में TRY के साथ सबसे बड़ा दर्द है ... फिलहाल SQL सर्वर में CATCH तर्क। यह किया जा सकता है, लेकिन यह थोड़ा सा है। SQL सर्वर 2012 में इसमें आने वाले कुछ सुधारों को देखें, विशेष रूप से सिस्टम अपवादों को फिर से फेंकना (मूल त्रुटि संख्या को संरक्षित करना)। इसके अलावा, FORMATMESSAGE है , जो त्रुटि संदेशों के निर्माण में कुछ लचीलापन जोड़ता है, विशेष रूप से लॉगिंग उद्देश्यों के लिए।