आप इसे इस तरह से फिर से फेंक सकते हैं:
..
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 सर्वर त्रुटि प्रबंधन:अपवाद और डेटाबेस-क्लाइंट अनुबंध