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

संग्रहीत कार्यविधि से त्रुटि संदेश लौटाएं

आप 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 का उपयोग करना यह बताता है:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर (T-SQL) में वर्तमान लॉगिन नाम लौटाएँ

  2. जॉइन का उपयोग करके SQL सर्वर में 4 टेबल्स में शामिल होना

  3. SQL सर्वर 2014 वृद्धिशील सांख्यिकी

  4. प्रत्येक कार्यकर्ता और नौकरी / आदेश पर ओवरलैप / ओवरलैपिंग समय के साथ कई नौकरियों / आदेशों के साथ काम करने का कुल समय ज्ञात करें

  5. SQL सर्वर में LEN () बनाम DATALENGTH ()