Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर:मूल अपवाद संख्या के साथ अपवाद को फिर से फेंकें

आप इसे इस तरह से फिर से फेंक सकते हैं:

..
END TRY
BEGIN CATCH
    DECLARE @errnum int;
    SELECT @errnum = ERROR_NUMBER();
    RAISERROR (@errnum, 16, 1);
END CATCH

हालांकि, ERROR_NUMBER()

के लिए sys.messages पंक्तियों में %s आदि प्लेसहोल्डर्स की वजह से आप सबसे अधिक अर्थ खो देते हैं

आप नंबर शामिल करने और मूल संदेश को फिर से फेंकने के लिए ऐसा कुछ कर सकते हैं

..
END TRY
BEGIN CATCH
    DECLARE @errnum nchar(5), @errmsg nvarchar(2048);
    SELECT
        @errnum = RIGHT('00000' + ERROR_NUMBER(), 5),
        @errmsg = @errnum + ' ' + ERROR_MESSAGE();
    RAISERROR (@errmsg, 16, 1);
END CATCH

पहले 5 वर्ण मूल संख्या हैं।

लेकिन अगर आपके पास नेस्टेड कोड है, तो आपको "00123 00456 एरर टेक्स्ट" मिलेगा।

व्यक्तिगत रूप से, मैं केवल अपनी त्रुटियों (50000) को इंजन त्रुटियों (जैसे अनुपलब्ध पैरामीटर) से अलग करने के लिए SQL अपवाद संख्याओं से निपटता हूं, जहां मेरा कोड नहीं चलता है।

अंत में, आप इसे रिटर्न वैल्यू पास कर सकते हैं।

मैंने इस पर एक प्रश्न पूछा:SQL सर्वर त्रुटि प्रबंधन:अपवाद और डेटाबेस-क्लाइंट अनुबंध



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. डुप्लिकेट रिकॉर्ड खोजने के लिए कुशल क्वेरी

  2. क्या SQL सर्वर 'मनी' डेटा एक दशमलव फ़्लोटिंग पॉइंट या बाइनरी फ़्लोटिंग पॉइंट टाइप करता है?

  3. क्या हम कोड पहले माइग्रेशन का उपयोग करके SQL स्क्रिप्ट चला सकते हैं?

  4. SQL सर्वर में अल्पविराम से अलग की गई सूची को पंक्तियों में कैसे बदलें

  5. एक डेटाबेस मेल प्रोफाइल बनाएं (SSMS)