SQL सर्वर में ERROR_STATE () क्या है और इसका उपयोग कैसे किया जा सकता है?


13

मैंने पढ़ा कि ERROR_STATE()स्रोत कोड में विभिन्न राज्यों / स्थानों के बीच अंतर करने में मदद मिल सकती है जहां एक ही प्रकार की त्रुटि हो सकती है। लेकिन यह मेरे लिए वास्तव में स्पष्ट नहीं है कि यह कैसे उपयोगी हो सकता है।

MSDN बताता है:

ERROR_STATE() उस त्रुटि की स्थिति संख्या लौटाता है, जो एक TRY के CATCH ब्लॉक का कारण बनी ... CATCH का निर्माण किया जाना।

इसका वास्तव में उपयोग कैसे किया जा सकता है? क्या कोई मुझे एक उदाहरण दे सकता है, इस संदर्भ लेख में प्रदान की गई चीजें वास्तव में मेरे लिए अच्छी तरह से समझाने में मदद नहीं करती हैं?


Error_Stateऔर Error_Numberसंयोजन आपको एक त्रुटि के बारे में अधिक स्पष्ट तस्वीर देगा। अन्य त्रुटि हैंडलिंग संबंधित कार्यों पर एक नज़र डालें यहाँ
रवींद्र Gullapalli

धन्यवाद! लेकिन मैंने इस लिंक को पहले भी पढ़ा था। इसने मदद नहीं की क्योंकि MSDN पर इसके लिए अच्छे उदाहरण नहीं दिए गए हैं। इसलिए मैंने यहां सवाल उठाया।

जवाबों:


9

SQL सर्वर एरर स्टेट्स का उद्देश्य SQL सर्वर डेवलपमेंट टीम के लिए कोड में सही जगह सिस्टम एरर को पहचानने में सक्षम होना है, यह देखते हुए कि कई जगह कई एरर उठाए गए हैं।

आप एक अंतिम उपयोगकर्ता के रूप में (जैसे कि एसक्यूएल सर्वर का उपयोग करने वाले अनुप्रयोगों के डेवलपर) इसी तरह से पारित राज्य का उपयोग कर सकते हैं RAISERRORताकि आपके उत्पाद का समर्थन उस स्थान की पहचान कर सके जहां एक प्रक्रिया एक त्रुटि उठाती है, उदाहरण के लिए:

create procedure usp_my_proc
as
if <somecondition>
  raiserror(N'Error foo and bar', 16, 0);
if <someothercondition>
  raiserror(N'Error foo and bar', 16, 1);
go

देखें कि कैसे दो राज्य आपको बाद में अंतर करने की अनुमति देते हैं कि कौन सा त्रुटि मामला हिट हुआ। इससे पहले कि आप कहते हैं 'लेकिन मैं त्रुटि संदेश देख सकता हूं' मैं आपको एक शब्द बता रहा हूं: अंतर्राष्ट्रीयकरण।


हाँ, यही मैं ढूंढ रहा था ..! :) अब सब साफ! धन्यवाद!
जकजिल

बहुत अच्छा जवाब। आपके पोस्ट से प्राप्त ज्ञान बेहतर समझ का है तो यह Technet.microsoft.com/en-us/library/ms180031.aspx
kashif

6

नहीं, यह आपको कुछ भी पता लगाने में मदद नहीं करता है कि त्रुटि कहां हुई है। यहाँ एक त्वरित उदाहरण है। यदि आप 0 से विभाजित करने का प्रयास करते हैं, तो आपको विवरण का एक गुच्छा के साथ एक त्रुटि संदेश मिलता है:

SELECT 1/0;

परिणाम:

Msg 8134, Level 16, State 1, Line 1
Divide by zero error encountered.

State1 के मान के साथ कहा जाने वाला देखें ? ERROR_STATE()यह मान लौटाता है। इसलिए यदि आप उपयोग करते हैं TRY/CATCH:

BEGIN TRY
  SELECT 1/0;
END TRY
BEGIN CATCH
  SELECT ERROR_STATE();
END CATCH

परिणाम:

----
   1

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

http://msdn.microsoft.com/en-us/library/ms175976.aspx

http://www.sommarskog.se/error_handling_2005.html


धन्यवाद, इससे थोड़ी मदद मिली। अपना जवाब मत देना क्योंकि मुझे विशेषाधिकार की आवश्यकता नहीं है। हालाँकि, मैं इस समारोह के अस्तित्व का कारण इसके उदाहरण से प्राप्त करना चाहता था। MSDN कहता है कि ERROR_STATE () त्रुटि स्थिति संख्या लौटाता है, तो मैं उसके साथ क्या करूँ !!

2
@jaczjill कभी-कभी आप चाहते हैं कि आपका एप्लिकेशन error_state और आपकी त्रुटि से निपटने वाले आर्किटेक्चर की जटिलता के आधार पर एक निश्चित तरीके से प्रतिक्रिया दे, लेकिन मुझे संदेह है कि मोटे तौर पर त्रुटियों को संभालना दुर्लभ है। त्रुटि संख्या स्वयं ( विशिष्ट त्रुटियों को फंसाने ) या त्रुटि की गंभीरता के साथ बहुत अधिक सामान्य है । मुझे यह याद नहीं है कि किसी ने भी त्रुटि स्थिति का उपयोग करते हुए डेमो को छोड़कर यह प्रदर्शित करते हुए कि यह मौजूद है, किसी को भी त्रुटि स्थिति का उपयोग करते हुए याद नहीं किया।
हारून बर्ट्रेंड

ठीक है, धन्यवाद हारून :) इसके अलावा, क्या आप इस प्रश्न के लिए एक इनाम निर्धारित कर सकते हैं? ताकि कुछ तकनीकी विशेषज्ञ इसका सटीक जवाब पाने के लिए चालान के रूप में ले लें। और आप विजेता आदमी हैं।

4
हाँ @AaronBertrand ने अपने सही उत्तर के खिलाफ प्रतिस्पर्धा करने के लिए अपने खुद के बिंदुओं का एक गुच्छा रखा।
ज़ैन

2
@jaczjill ऐसी बहुत सारी तकनीकें नहीं हैं जो एरॉन की तुलना में SQL सर्वर के बारे में अधिक जानते हैं, और उनमें से ज्यादातर कभी यहां दिखाई नहीं देते हैं। और आपके प्रश्न का उत्तर यहां दिया गया है (सबसे अधिक संभवत: जैसा कि यह जा सकता है)।
dezso

1

संक्षिप्त उत्तर - यह नहीं हो सकता। एक ERROR_STATE अनिवार्य रूप से एक ERROR_NUMBER का उप-विभाजन है। यह आपको नहीं बता सकता है कि किस कोड की त्रुटि के कारण (ERROR_NUMBER और ERROR_STATE के रूप में इंफोर्स को छोड़कर) आपको त्रुटि का कारण बताता है, और फिर यह स्पष्ट हो जाता है कि कारण क्या है)।


समझ में आया कि इसे हमेशा ERROR_NUMBER () फ़ंक्शन के साथ उपयोग किया जाना है। हालाँकि ERROR_NUMBER () के साथ इसके उपयोग ERROR_STATE () का एक उदाहरण पूरी तरह से तस्वीर को स्पष्ट करेगा। या कोई भी अच्छा संदर्भ लिंक पर्याप्त होगा।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.