आप TRY..CATCH का उपयोग शुरू करना चाह सकते हैं अपनी प्रक्रियाओं में अवरोधित करें
तो आपकी प्रक्रिया को इस प्रकार फिर से लिखा जा सकता है:
CREATE PROCEDURE spTest_Delete @ID INT
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRY
BEGIN TRANSACTION
DELETE
FROM Test
WHERE ID = @ID;
COMMIT TRANSACTION
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION
SELECT ERROR_NUMBER(), ERROR_MESSAGE();
END CATCH
END
साथ ही, कृपया ध्यान दें कि आप सिंगल डिलीट स्टेटमेंट के रूप में चल रहे हैं। इसका मतलब है कि इसे लेनदेन में लपेटने की आवश्यकता नहीं है। यह प्रश्न बताता है क्यों।
आपका कोड यह बन जाता है:
CREATE PROCEDURE spTest_Delete @ID INT
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRY
DELETE
FROM Test
WHERE ID = @ID;
END TRY
BEGIN CATCH
SELECT ERROR_NUMBER(), ERROR_MESSAGE();
END CATCH
END
अब क्यों आपका @errMessage
हमेशा न्यूल होता है? क्योंकि ERROR_MESSAGE()
केवल कैच ब्लॉक में मान्य है। यह दस्तावेज़ीकरण
में लिखा है :
ट्रांजैक्ट-एसक्यूएल में TRY..CATCH का उपयोग करना यह बताता है: