13
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 は自動的にトランザクションをロールバックし、トランザクションが保持していたすべてのリソースを解放します。

ただし、自動ロールバックが発生しないことを他の投稿で読みました。

4

2 に答える 2