私のSQL-Server
学習曲線は前向きで、数年後、TRANSACTION
コードを効果的に使用するために戦っています。
COMMIT TRANSACTION
明示的に指定されていない場合、前のコードでエラーが発生しなかった時点で、ROLLBACK TRANSACTION
トランザクションはコミットされますか?問題は、次のような構造に関連しています。
USE MyDataBase;
GO
BEGIN TRANSACTION;
--complex query X here
ROLLBACK TRANSACTION; PRINT N'Rolled back the transaction.';
GO
...前のスクリプトROLLBACK TRANSACTION
でエラーが発生した場合にデータベースに変更を加えたくない状況で使用されたと思いました-上記では、これはです。上記で明示的に述べたい場合は、どこに配置する必要がありますか?X
COMMIT TRANSACTION
さらに混乱させるために、私は次のことを知っています-なぜそれが2回ロールバックするのですか?作成時にエラーが発生していROLLBACK
ませんか?
USE WHAnalysis;
GO
BEGIN TRANSACTION;
IF @@TRANCOUNT = 1
SELECT @@TRANCOUNT
--do a complex query here
ROLLBACK TRANSACTION; PRINT N'Rolled back the transaction.';
GO