Management Studio 2005:ステートメントをキャンセルするとロールバックがトリガーされますか?
-
07-07-2019 - |
質問
数分前、新しいsprocを作成しているときに、間違った削除ステートメントを実行しました。このようなもの:
Delete From SomeTable Where SomeStatusID=1
10秒後に、間違ったステータスを入力してキャンセルを押したことがわかりました。声明はキャンセルされたと述べた。
別のデータベースに復元して、たぶんたぶんたぶんテーブルを取り戻しました。これはトランザクションではなかったので、おそらくいくつかのレコードが削除されたと思います。
奇妙なことに、記録はすべて無傷でした。これがなぜなのか興味があります-明示的なトランザクションが定義されていなくても、この場合、個々の削除ステートメントをトランザクションとして扱いましたか?
解決
デフォルトでは、単一のDMLステートメントがトランザクションとして実行されます。ステートメントが成功すると、トランザクションはコミットされます。ステートメントがキャンセルされるか、失敗した場合、トランザクションはロールバックされます。
この動作はエンジンに組み込まれており、管理スタジオとは関係ありません。ドキュメントのトランザクションの自動コミットを参照してください。
他のヒント
常にトランザクションがあります。変更されるのは、これらのトランザクションが互いに分離される方法と、Management Studioでトランザクションが明示的に定義されていない可能性があり、クエリの終了時に自動的にコミットされる点だけです。
所属していません StackOverflow