USE AdventureWorks;
GO
BEGIN TRANSACTION;
GO
DELETE FROM HumanResources.JobCandidate WHERE JobCandidateID = 10;
DELETE FROM HumanResources.JobCandidate WHERE JobCandidateID = 11;
DELETE FROM HumanResources.JobCandidate WHERE JobCandidateID = 12;
GO
COMMIT TRANSACTION;
GO
最初の削除ステートメントが失敗した場合はどうなりますか? 2 番目と 3 番目の削除ステートメントは実行されますか? この例にはエラー処理がありません。例外が発生した場合にトランザクションを開いたままにしますか?それとも SQL Server はトランザクションを自動的にロールバックしますか? 開いているトランザクション = ロックされたリソースですよね?
トランザクションを使用するストアド プロシージャに TRY...CATCH を適用する必要があるかどうかを判断しています。
については承知してset xact_abort on
いますが、それがないとどうなるか知りたいです。
ドキュメントで見つけたものは次のとおりです-トランザクションの制御(データベースエンジン):
エラーが原因でトランザクションを正常に完了できない場合、SQL Server は自動的にトランザクションをロールバックし、トランザクションが保持していたすべてのリソースを解放します。
ただし、自動ロールバックが発生しないことを他の投稿で読みました。