कोशिश करने के लिए एक चरण-दर-चरण मार्गदर्शिका ... SQL सर्वर त्रुटियों को संभालने के लिए कैच करें

निष्पादन में बाधा डाले बिना त्रुटियों की पहचान करें

TRY ... ट्रांजैक्ट में कैच स्टेटमेंट- एसक्यूएल आपके डेटाबेस अनुप्रयोगों में त्रुटि की स्थिति का पता लगाता है और संभालता है। यह कथन SQL सर्वर त्रुटि हैंडलिंग का आधारशिला है और मजबूत डेटाबेस अनुप्रयोगों को विकसित करने का एक महत्वपूर्ण हिस्सा है। कोशिश करें ... कैच 2008 के साथ शुरू होने वाले SQL सर्वर पर लागू होता है, Azure SQL डेटाबेस, Azure SQL डेटा वेयरहाउस और समांतर डेटा वेयरहाउस।

TRY..CATCH पेश करना

कोशिश करें ... कैच आपको दो ट्रांजैक्ट-एसक्यूएल कथन निर्दिष्ट करने की अनुमति देकर काम करता है: एक जिसे आप "कोशिश" करना चाहते हैं और किसी अन्य त्रुटि को "पकड़ने" के लिए उपयोग करने के लिए उपयोग करना चाहते हैं। जब SQL सर्वर एक TRY का सामना करता है ... कैच स्टेटमेंट, यह तुरंत TRY खंड में शामिल कथन निष्पादित करता है। यदि TRY कथन सफलतापूर्वक निष्पादित करता है, तो SQL सर्वर बस चलता है। हालांकि, यदि TRY कथन एक त्रुटि उत्पन्न करता है, तो SQL सर्वर गलती से त्रुटि को संभालने के लिए CATCH कथन निष्पादित करता है।

मूल वाक्यविन्यास इस फ़ॉर्म को लेता है:

BEGIN कोशिश करें {sql_statement | कथन_ब्लॉक} अंत कोशिश करें BEGIN कैच [{sql_statement | कथन_ब्लॉक}] अंत कैच [; ]

कोशिश करो ... कैच उदाहरण

उदाहरण के उपयोग के माध्यम से इस कथन के उपयोग को समझना सबसे आसान है। कल्पना करें कि आप एक मानव संसाधन डेटाबेस के व्यवस्थापक हैं जिसमें "कर्मचारी" नामक एक सारणी है जिसमें आपके संगठन के प्रत्येक कर्मचारी के बारे में जानकारी है। वह तालिका प्राथमिक कुंजी के रूप में एक पूर्णांक कर्मचारी आईडी संख्या का उपयोग करती है। आप अपने डेटाबेस में एक नया कर्मचारी डालने के लिए नीचे दिए गए कथन का उपयोग करने का प्रयास कर सकते हैं:

कर्मचारियों में शामिल (आईडी, first_name, last_name, एक्सटेंशन) मूल्य (12497, 'माइक', 'चैपल', 4201)

सामान्य परिस्थितियों में, यह कथन कर्मचारी तालिका में एक पंक्ति जोड़ देगा। हालांकि, यदि आईडी 12497 वाला कर्मचारी पहले से ही डेटाबेस में मौजूद है, तो पंक्ति डालने से प्राथमिक कुंजी बाधा का उल्लंघन होगा और परिणामस्वरूप निम्न त्रुटि होगी:

संदेश 2627, स्तर 14, राज्य 1, रेखा 1 प्राथमिक कुंजी बाधा 'PK_employee_id' का उल्लंघन। ऑब्जेक्ट 'dbo.employees' में डुप्लिकेट कुंजी सम्मिलित नहीं कर सकता। बयान समाप्त कर दिया गया है।

हालांकि यह त्रुटि आपको समस्या का निवारण करने के लिए आवश्यक जानकारी प्रदान करती है, इसके साथ दो समस्याएं हैं। सबसे पहले, संदेश गुप्त है। इसमें त्रुटि कोड, लाइन नंबर और अन्य जानकारी औसत उपयोगकर्ता के लिए अनजान है। दूसरा, और सबसे महत्वपूर्ण बात यह है कि यह बयान रद्द करने का कारण बनता है और एप्लिकेशन क्रैश का कारण बन सकता है।

वैकल्पिक रूप से कथन को लपेटना है ... कैश स्टेटमेंट, जैसा कि नीचे दिखाया गया है:

BEGIN कर्मचारियों (आईडी, first_name, last_name, एक्सटेंशन) में INRERT प्रयास करें (12497, 'माइक', 'चैपल', 4201) अंत कोशिश करें BEGIN कैच प्रिंट 'त्रुटि:' + ERROR_MESSAGE (); EXEC msdb.dbo.sp_send_dbmail @profile_name = 'कर्मचारी मेल', @recipients = 'hr@foo.com', @body = 'एक नया कर्मचारी रिकॉर्ड बनाने में त्रुटि हुई।', @subject = 'कर्मचारी आईडी डुप्लिकेशन त्रुटि'; अंत कैच

इस उदाहरण में, कोई भी त्रुटि जो उपयोगकर्ता को आदेश और hr@foo.com ई-मेल पता निष्पादित करने वाले दोनों को रिपोर्ट की जाती है। उपयोगकर्ता को दिखाए गए त्रुटि नीचे दिखाई देती है:

त्रुटि: प्राथमिक कुंजी बाधा 'PK_employee_id' का उल्लंघन। ऑब्जेक्ट 'dbo.employees' में डुप्लिकेट कुंजी सम्मिलित नहीं कर सकता। मेल कतारबद्ध

सबसे महत्वपूर्ण बात यह है कि प्रोग्राम निष्पादन सामान्य रूप से जारी रहता है, जिससे प्रोग्रामर गलती से त्रुटि को संभालने की अनुमति देता है। TRY का उपयोग ... कैच स्टेटमेंट SQL सर्वर डेटाबेस अनुप्रयोगों में होने वाली त्रुटियों को सक्रिय रूप से पहचानने और प्रबंधित करने का एक शानदार तरीका है।

और अधिक सीखना

यदि आप संरचित क्वेरी भाषा के बारे में और जानना चाहते हैं, तो SQL को परिचय पढ़ें।