नीचे दिए गए निम्न SQL कथन कुछ SQL का एक अच्छा उदाहरण है जो नेस्टेड विवरणों के साथ अपवाद फेंकता है। यह कथन के पकड़ हिस्से में लगता है कि मैं केवल बाहरी अपवाद विवरण प्राप्त कर सकता हूं Could not create constraint. See previous errors
(बहुत उपयोगी नहीं!)।SQL सर्वर प्रयास करें आंतरिक अपवाद संदेश conundrum
परिचय तालिका 'तालिका 2' पर विदेशी कुँजी बाधा 'FK_TWO' चक्र या एक से अधिक झरना रास्तों का कारण हो सकता है: क्या मैं प्राप्त करना चाहते हैं भीतरी अपवाद संदेश है। किसी भी कार्रवाई को हटाएं या पर कोई कार्रवाई अपडेट करें या अन्य विदेशी कुंजी बाधाओं को संशोधित करें (आप को कोड को बिना किसी प्रयास के चलाकर प्राप्त कर सकते हैं)।
कैच ब्लॉक में, यह टी-एसक्यूएल में कैसे प्राप्त किया जा सकता है?
BEGIN TRY
BEGIN TRAN;
CREATE TABLE TABLE1 (USER_ID INTEGER NOT NULL PRIMARY KEY, USER_NAME
CHAR(50) NOT NULL);
CREATE TABLE TABLE2 (AUTHOR_ID INTEGER NOT NULL PRIMARY KEY, AUTHOR_NAME
CHAR(50) NOT NULL, LASTMODIFIEDBY INTEGER NOT NULL, ADDEDBY INTEGER NOT
NULL);
ALTER TABLE TABLE2 ADD CONSTRAINT FK_ONE FOREIGN KEY (LASTMODIFIEDBY)
REFERENCES TABLE1 (USER_ID) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE TABLE2 ADD CONSTRAINT FK_TWO FOREIGN KEY (ADDEDBY)
REFERENCES TABLE1(USER_ID) ON DELETE NO ACTION ON UPDATE CASCADE;
COMMIT TRAN;
END TRY
BEGIN CATCH
DECLARE @ERROR_MSG NVARCHAR(MAX), @SEVERITY INT, @STATE INT
SELECT @SEVERITY = ERROR_SEVERITY(), @STATE = ERROR_STATE()
, @ERROR_MSG = ERROR_MESSAGE() + ' err src line: ' + CAST(ERROR_LINE() AS NVARCHAR(20)) + ' ' + ISNULL(ERROR_PROCEDURE(), '');
ROLLBACK;
-- RE-THROW EXCEPTION FOR DIAGNOSTIC VISIBILITY
RAISERROR (@ERROR_MSG ,@SEVERITY, @STATE);
END CATCH;
[संपादित करें]
तो यह बहुत बाद खोज लगता है इस समस्या का कोई समाधान नहीं है। उम्मीद है कि वे इसे भविष्य के संस्करण में ठीक कर देंगे।
मुझे नहीं लगता कि ऐसा करने का कोई तरीका है। यह संबंधित प्रश्न भी देखें: [एक ही कथन से एकाधिक त्रुटि संदेशों को कैप्चर करना] (http://stackoverflow.com/questions/3697492/capturing-multiple-error-messages-from-a-single-statement) –