SQL सर्वर त्रुटियों को संभालने के लिए TRY/CATCH का उपयोग करना

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

TRY/CATCH 2008 से शुरू होने वाले SQL सर्वर, Azure SQL डेटाबेस, Azure SQL डेटा वेयरहाउस और समानांतर डेटा वेयरहाउस पर लागू होता है।

पेश है ट्राई/कैच

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

मूल वाक्यविन्यास यह रूप लेता है:

कोशिश शुरू करें
{ sql_statement | स्टेटमेंट ब्लॉक }
कोशिश खत्म करें
शुरुआत पकड़
[ { sql_statement | स्टेटमेंट_ब्लॉक}]
अंत कैच
[; ]
instagram viewer

ट्राई/कैच उदाहरण

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

आप अपने डेटाबेस में एक नया कर्मचारी सम्मिलित करने के लिए नीचे दिए गए कथन का उपयोग करने का प्रयास कर सकते हैं:

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

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

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

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

विकल्प यह है कि कथन को TRY…CATCH कथन में लपेटा जाए, जैसा कि यहाँ दिखाया गया है:

कोशिश शुरू करें
कर्मचारियों में सम्मिलित करें (आईडी, first_name, last_name, एक्सटेंशन)
VALUES(12497, 'माइक', 'चैपल', 4201)
कोशिश खत्म करें
शुरुआत पकड़
प्रिंट 'त्रुटि:' + ERROR_MESSAGE ();
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'कर्मचारी मेल',
@प्राप्तकर्ता = '[email protected]',
@body = 'नया कर्मचारी रिकॉर्ड बनाने में त्रुटि हुई।',
@subject = 'कर्मचारी डेटाबेस त्रुटि';
अंत कैच

इस उदाहरण में, होने वाली कोई भी त्रुटि उपयोगकर्ता द्वारा कमांड निष्पादित करने और [email protected] ई-मेल पते दोनों को रिपोर्ट की जाती है। उपयोगकर्ता को दिखाई गई त्रुटि है:

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

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

और अधिक सीखना

संरचित क्वेरी भाषा के बारे में अधिक जानने के लिए, हमारा लेख देखें SQL के मूल सिद्धांत.