एमएस SQL ​​सर्वर प्रबंधन स्टूडियो में लेनदेन के साथ काम करने का सबसे अच्छा तरीका है


127

मान लीजिए कि मेरे पास एक एसक्यूएल स्टेटमेंट है जो वाक्यात्मक रूप से और शब्दार्थ रूप से सही है इसलिए यह निष्पादित होता है।

प्रबंधन स्टूडियो (या किसी अन्य क्वेरी टूल) में मैं एसक्यूएल स्टेटमेंट्स का परीक्षण कैसे कर सकता हूं, और अगर मैं नोटिस करता हूं कि उन्होंने कुछ तोड़ दिया है, तो रोलबैक (एक अलग क्वेरी में?)

जवाबों:


227

सबसे आसान बात यह है कि अपने कोड को लेन-देन में लपेटें, और उसके बाद टी-एसक्यूएल कोड लाइन के प्रत्येक बैच को निष्पादित करें।

उदाहरण के लिए,

Begin Transaction

         -Do some T-SQL queries here.

Rollback transaction -- OR commit transaction

यदि आप त्रुटि हैंडलिंग को शामिल करना चाहते हैं तो आप TRY ... CATCH BLOCK का उपयोग करके ऐसा कर सकते हैं। एक त्रुटि तब होती है जब आप कैच ब्लॉक के भीतर ट्रैसैक्शन को रोलबैक कर सकते हैं।

उदाहरण के लिए:

USE AdventureWorks;
GO
BEGIN TRANSACTION;

BEGIN TRY
    -- Generate a constraint violation error.
    DELETE FROM Production.Product
    WHERE ProductID = 980;
END TRY
BEGIN CATCH
    SELECT 
        ERROR_NUMBER() AS ErrorNumber
        ,ERROR_SEVERITY() AS ErrorSeverity
        ,ERROR_STATE() AS ErrorState
        ,ERROR_PROCEDURE() AS ErrorProcedure
        ,ERROR_LINE() AS ErrorLine
        ,ERROR_MESSAGE() AS ErrorMessage;

    IF @@TRANCOUNT > 0
        ROLLBACK TRANSACTION;
END CATCH;

IF @@TRANCOUNT > 0
    COMMIT TRANSACTION;
GO

अधिक जानकारी के लिए निम्न लिंक देखें।

http://msdn.microsoft.com/en-us/library/ms175976.aspx

आशा है कि यह मदद करता है लेकिन कृपया मुझे बताएं कि क्या आपको अधिक जानकारी की आवश्यकता है।


3
धन्यवाद। मैंने पहली बार @@ TRANCOUNT के बारे में यहां देखा और क्या आप मुझे बता सकते हैं कि ROLLBACK प्रोसेसिंग के बाद "IF @@ TRANCOUNT> 0 COMMIT TRANSACTION" क्या होता है? और @@ TRANCOUNT का क्या मूल्य है? एक बार फिर धन्यवाद।
क्यूमास्टर

2
रोलबैक ट्रांज़ैक्शन को बाहर करने के बाद @@ TRANCOUNT को वापस 0 पर सेट किया गया है। तब तक कमिट ट्रांज़ैक्शन को निष्पादित नहीं किया जाएगा। Msdn.microsoft.com/de-de/library/ms187967.aspx
Christoph Brückmann

8

मैं एक बिंदु जोड़ना चाहता हूं जो आप भी कर सकते हैं (और अगर आप जो लिख रहे हैं वह जटिल है) रोलबैक में एक परीक्षण चर जोड़ें यदि आप परीक्षण मोड में हैं। फिर आप एक ही बार में पूरी बात को अंजाम दे सकते हैं। अक्सर मैं विभिन्न ऑपरेशनों के पहले और बाद के परिणामों को देखने के लिए कोड भी जोड़ता हूं, खासकर अगर यह एक जटिल स्क्रिप्ट है।

नीचे उदाहरण:

USE AdventureWorks;
GO
DECLARE @TEST INT = 1--1 is test mode, use zero when you are ready to execute
BEGIN TRANSACTION;

BEGIN TRY
     IF @TEST= 1
        BEGIN
            SELECT *FROM Production.Product
                WHERE ProductID = 980;
        END    
    -- Generate a constraint violation error.
    DELETE FROM Production.Product
    WHERE ProductID = 980;

     IF @TEST= 1
        BEGIN
            SELECT *FROM Production.Product
                WHERE ProductID = 980;
            IF @@TRANCOUNT > 0
                ROLLBACK TRANSACTION;
        END    
END TRY

BEGIN CATCH
    SELECT 
        ERROR_NUMBER() AS ErrorNumber
        ,ERROR_SEVERITY() AS ErrorSeverity
        ,ERROR_STATE() AS ErrorState
        ,ERROR_PROCEDURE() AS ErrorProcedure
        ,ERROR_LINE() AS ErrorLine
        ,ERROR_MESSAGE() AS ErrorMessage;

    IF @@TRANCOUNT > 0
        ROLLBACK TRANSACTION;
END CATCH;

IF @@TRANCOUNT > 0 AND @TEST = 0
    COMMIT TRANSACTION;
GO
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.