2016-12-04 11 views
0
SELECT * 
FROM [Production].[Product] 

BEGIN TRY 
    BEGIN TRAN; 
     UPDATE [Production].[Product] 
     SET Color = 'Off White' 

     SELECT * 
     FROM [Production].[Product] 

     SELECT @@TRANCOUNT AS 'Transaction Count' 

    COMMIT TRAN; 
END TRY 
BEGIN CATCH 
    ROLLBACK TRAN; 
END CATCH; 

SELECT *, @@TRANCOUNT AS 'Transaction Count' 
FROM [Production].[Product] 

私はエラーは発生していませんが、変更は予定通りにロールバックされません。私は、それが必要な私は富を共有するだろうと思ったようロールバックするSQL Server 2012トランザクションを取得できません

+0

TRYブロック内にあるため、TRYに失敗した場合にのみロールバックする必要があります。エラーがなければ、TRANがロールバックされないことが予想されます。 TRY/CATCHなしでこのクエリを実行しましたか? –

+0

SELECT * FROM [プロダクション] \t BEGIN TRAN; \t \t UPDATE [製造]。[製品] \t \t SET色= \t \t SELECT 'オフホワイト' * [製造]。[製品] 'のトランザクション件数' AS \t \t SELECT @@ TRANCOUNT FROM \t \t \t COMMIT TRAN; \t ROLLBACK TRAN; SELECT *、@@ FROM TRANCOUNT AS「取引件数」 [製造]。[製品]」 –

+0

変更がまだロールバックされていないあなたが自動コミットのトランザクションがオンになっている可能性がありますように –

答えて

0
SELECT * 
FROM [Production].[Product] 

BEGIN TRAN; 
SAVE TRAN Product1; 
    UPDATE [Production].[Product] 
    SET Color = 'Off White' 
    SELECT * 
    FROM [Production].[Product] 
    SELECT @@TRANCOUNT AS 'Transaction Count' 
    ROLLBACK TRAN Product1; 
COMMIT TRAN; 




SELECT * 
FROM [Production].[Product] 
SELECT @@TRANCOUNT AS 'Transaction Count' 

は、これは動作します〜

編集1:コードへの重要な変更が含まれるように忘れてしまった、私は人間だけですよ!

関連する問題