जब आपके टी-एसक्यूएल में कुछ गलत हो जाता है, तो आप कम से कम खुदाई और उपयोगकर्ताओं को व्यवधान के साथ समस्या को जल्दी से ठीक करना चाहते हैं। SQL सर्वर-जनरेटेड त्रुटि संदेश अत्यधिक तकनीकी और समझने में कठिन हैं, जो मुद्दों को अलग करना मुश्किल बना सकते हैं और समाधान समय को धीमा कर सकते हैं। सौभाग्य से, डीबीए SQL सर्वर त्रुटि संदेशों के विकल्प के रूप में SQL सर्वर RAISERROR को लागू कर सकता है।
RAISERROR एक SQL सर्वर एरर हैंडलिंग स्टेटमेंट है जो एक एरर मैसेज जेनरेट करता है और एरर प्रोसेसिंग शुरू करता है। RAISERROR या तो उपयोगकर्ता द्वारा परिभाषित संदेश को संदर्भित कर सकता है जो sys.messages कैटलॉग दृश्य में संग्रहीत है या यह गतिशील रूप से एक संदेश बना सकता है। संदेश को सर्वर त्रुटि संदेश के रूप में कॉलिंग एप्लिकेशन या TRY...CATCH निर्माण के संबद्ध CATCH ब्लॉक में वापस कर दिया जाता है।
ऐसे कई परिदृश्य हैं जिनमें RAISERROR कथन का उपयोग करना उचित है:
- ट्रांजैक्ट-एसक्यूएल कोड समस्या निवारण
- वेरिएबल टेक्स्ट वाले संदेश लौटाना
- डेटा मानों की जांच करना
- जब आपको किसी TRY ब्लॉक से संबंधित CATCH ब्लॉक में कूदने के लिए निष्पादन की आवश्यकता हो या CATCH ब्लॉक से कॉल करने वालों को त्रुटि जानकारी वापस करना हो
यह ध्यान रखना महत्वपूर्ण है कि नए अनुप्रयोगों को विकसित करते समय, त्रुटि प्रबंधन के लिए RAISERROR के लिए एक THROW स्टेटमेंट अब बेहतर है। लेकिन उस पर और बाद में।
SQL सर्वर त्रुटि प्रबंधन के लिए RAISERROR का उपयोग क्यों करें?
SQL सर्वर-जनरेटेड त्रुटि प्रबंधन पर RAISERROR चुनने के दो प्राथमिक कारण हैं:
- RAISERROR संदेश गंभीरता और स्थिति के स्तर के संबंध में अनुकूलन योग्य हैं
- उन्हें प्राकृतिक भाषा में लिखा जा सकता है जो समझने में आसान हो
RAISERROR एप्लिकेशन को उसी प्रारूप में त्रुटि संदेश देता है जो SQL सर्वर डेटाबेस इंजन द्वारा उत्पन्न होता है। यह डेवलपर्स को अपने स्वयं के त्रुटि संदेश उत्पन्न करने की अनुमति देता है, इसलिए संदेश पढ़ने वाला कोई भी व्यक्ति यह समझने में सक्षम होगा कि SQL सर्वर के तकनीकी त्रुटि संदेश को समझने की कोशिश करने के बजाय वास्तविक समस्या क्या है। डेवलपर्स त्रुटि संदेशों के लिए अपना गंभीरता स्तर, संदेश आईडी और स्थिति भी सेट कर सकते हैं।
TRY...CATCH निर्माण के साथ RAISERROR का उपयोग करना
TRY...CATCH एक त्रुटि प्रबंधन निर्माण है जो आपको TRY अनुभाग में कोड निष्पादित करने देता है और CATCH अनुभाग में त्रुटियों को संभालने देता है। सामान्य तौर पर, TRY...CATCH कई T-SQL त्रुटियों की पहचान करने का एक प्रभावी तरीका है, लेकिन कुछ अपवाद भी हैं।
यह ट्यूटोरियल TRY... CATCH के संयोजन में RAISERROR का उपयोग करने का एक विस्तृत पूर्वाभ्यास प्रदान करता है। लेखक एक उदाहरण का उपयोग करता है जिसमें दिखाया गया है कि TRY ब्लॉक के अंदर RAISERROR का उपयोग कैसे करें ताकि निष्पादन संबंधित CATCH ब्लॉक पर जा सके। कैच ब्लॉक के अंदर, लेखक दर्शाता है कि कैच ब्लॉक को लागू करने वाली त्रुटि जानकारी को वापस करने के लिए RAISERROR का उपयोग कैसे करें। आउटपुट संदेश आईडी, गंभीरता का स्तर और त्रुटि स्थिति प्रदर्शित करता है।
RAISERROR बनाम THROW एरर हैंडलिंग स्टेटमेंट
RAISERROR को SQL Server 7.0 में पेश किया गया था और यह कई वर्षों से T-SQL त्रुटियों को संभालने का एक प्रभावी तरीका रहा है। लेकिन यदि आप नए ऐप्स विकसित कर रहे हैं, तो Microsoft अब RAISERROR के बजाय THROW स्टेटमेंट का उपयोग करने की अनुशंसा करता है।
जैसे-जैसे संगठन SQL Server 2012 और इसके बाद के संस्करण में अद्यतन होते हैं, RAISERROR को चरणबद्ध किया जा रहा है। वास्तव में, RAISERROR का उपयोग SQL Server 2014 की मूल रूप से संकलित संग्रहीत प्रक्रियाओं में नहीं किया जा सकता है। RAISERROR पर THROW को सुधार माना जाता है क्योंकि इसका उपयोग करना आसान है।
Microsoft का SQL सर्वर दस्तावेज़ RAISERROR और THROW त्रुटि प्रबंधन कथनों के बीच के अंतरों को निम्नानुसार तोड़ता है:
RAISERROR स्टेटमेंट
- यदि कोई msg_id RAISERROR को पास किया जाता है, तो आईडी को sys.messages में परिभाषित किया जाना चाहिए।
- msg_str पैरामीटर में प्रिंटफ स्वरूपण शैलियाँ हो सकती हैं।
गंभीरता पैरामीटर अपवाद की गंभीरता को निर्दिष्ट करता है।
थ्रो स्टेटमेंट
- त्रुटि_संख्या पैरामीटर को sys.messages में परिभाषित करने की आवश्यकता नहीं है।
- संदेश पैरामीटर प्रिंटफ शैली स्वरूपण को स्वीकार नहीं करता है।
- कोई गंभीरता पैरामीटर नहीं है। अपवाद की गंभीरता हमेशा 16 पर सेट होती है।
हालांकि RAISERROR के दिन गिने जा सकते हैं, यह SQL सर्वर के पुराने संस्करणों पर एक व्यवहार्य त्रुटि प्रबंधन विकल्प बना हुआ है। Microsoft SQL सर्वर (SQL सर्वर 2012 और ऊपर) के नए संस्करणों के उपयोगकर्ताओं को त्रुटि प्रबंधन को लागू करने के लिए RAISERROR के बजाय THROW कथन का उपयोग करने के लिए प्रेरित कर रहा है। Microsoft ने अभी तक RAISERROR पदावनति की घोषणा नहीं की है, लेकिन ऐसा लगता है कि यह जल्द ही बाद में होगा।