এমএস এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিওতে লেনদেনের সাথে কাজ করার সর্বোত্তম উপায়


127

ধরা যাক আমার কাছে একটি এসকিউএল স্টেটমেন্ট রয়েছে যা সিনট্যাক্টিকাল এবং সিনটিক্যালি সঠিক তাই এটি কার্যকর করে।

ম্যানেজমেন্ট স্টুডিওতে (বা অন্য কোনও ক্যোয়ারী সরঞ্জাম) আমি কীভাবে এসকিউএল স্টেটমেন্টগুলি পরীক্ষা করতে পারি এবং যদি আমি লক্ষ্য করি যে তারা কিছু ভেঙেছে, রোলব্যাক (একটি পৃথক ক্যোয়ারিতে?)

উত্তর:


227

সবচেয়ে সহজ কাজটি হ'ল আপনার লেনদেনের কোডটি মোড়ানো এবং তারপরে টি-এসকিউএল কোড লাইনটির প্রতিটি ব্যাচকে লাইন দিয়ে চালানো।

উদাহরণ স্বরূপ,

Begin Transaction

         -Do some T-SQL queries here.

Rollback transaction -- OR commit transaction

আপনি যদি ত্রুটি পরিচালনা পরিচালনা করতে চান তবে আপনি ট্রাই ... ক্যাচ ব্লক ব্যবহার করে এটি করতে পারেন। যদি কোনও ত্রুটি দেখা দেয় তবে আপনি ক্যাচ ব্লকের মধ্যে ট্রান্সেকশনটি রোলব্যাক করতে পারেন।

উদাহরণ স্বরূপ:

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
ওহে ধন্যবাদ. আমি এখানে প্রথমবারের মতো @@ ট্রান্স্যাক্ট দেখেছি এবং আপনি কি আমাকে বলতে পারবেন যে রোলব্যাক প্রক্রিয়াজাতকরণের পরে "যদি @ ট্রান্টিক> 0 কমিট ট্রান্সেকশন" হয়? এবং @@ ট্রান অ্যাকাউন্টের কী মূল্য আছে? আবার ধন্যবাদ.
কিউমাস্টার

2
রোলব্যাক ট্রান্সাকশনটি উত্তেজিত করার পরে @@ ট্রানস্যাক্ট 0 এ ফিরে সেট করা হয়েছে that এর দ্বারা কমিট ট্রান্সেকশন কার্যকর করা হবে না। দেখুন msdn.microsoft.com/de-de/library/ms187967.aspx
ক্রিস্টোফ 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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.