मेरे द्वारा उपयोग किए जाने वाले संग्रहीत कार्यविधि टेम्पलेट का हिस्सा यहां दिया गया है:
/* CREATE PROCEDURE... */
DECLARE
@ErrorMessage varchar(2000)
,@ErrorSeverity tinyint
,@ErrorState tinyint
/* Additional code */
BEGIN TRY
/* Your code here */
END TRY
BEGIN CATCH
SET @ErrorMessage = ERROR_MESSAGE()
SET @ErrorSeverity = ERROR_SEVERITY()
SET @ErrorState = ERROR_STATE()
RAISERROR(@ErrorMessage, @ErrorSeverity, @ErrorState)
BREAK
END CATCH
/* Further cleanup code */
कोशिश करें/पकड़ें ब्लॉक मुश्किल हो सकते हैं लेकिन @@ त्रुटि से कहीं अधिक गहन हैं। सबसे महत्वपूर्ण बात यह है कि आप उनके भीतर विभिन्न error_xxx() फ़ंक्शंस का उपयोग कर सकते हैं। यहां, मैं त्रुटि को फिर से बढ़ाने के लिए पर्याप्त अन्य डेटा के साथ चर @ErrorMessage में उचित त्रुटि संदेश संग्रहीत करता हूं। यहां से, कितने भी विकल्प उपलब्ध हैं; आप @ErrorMessage को एक आउटपुट वैरिएबल बना सकते हैं, विशिष्ट त्रुटियों के लिए परीक्षण कर सकते हैं और उन्हें संभाल सकते हैं, या अपने स्वयं के त्रुटि संदेशों का निर्माण कर सकते हैं (या मौजूदा लोगों को स्पष्ट होने के लिए समायोजित कर सकते हैं - आप यह जानकर परेशान हो सकते हैं कि आप इसे कितनी बार करना चाहेंगे)। अन्य विकल्प स्वयं को प्रस्तुत करेंगे।
देखने के लिए कुछ:कुछ स्थितियों में, SQL दो त्रुटि संदेशों को एक के बाद एक फेंक देगा... और error_message()
केवल अंतिम को ही पकड़ेगा, जो आमतौर पर "ऑब्जेक्ट बनाने का प्रयास विफल" जैसा कुछ कहता है, पहली त्रुटि संदेश में दी गई वास्तविक त्रुटि के साथ। यह वह जगह है जहाँ अपना स्वयं का त्रुटि संदेश बनाना आता है।