2005.05.25

SQL Server でDDLがRollbackできる?

先日、SQL Server 2000 で以下のような処理を行ってみました。

---
Begin Tran

Select * From A --- 1
Truncate Table A
Select * From A --- 2

Rollback Tran
Select * From A --- 3

この結果、1 のSelect文では当然全件取得でき、2 では0件でした。
そして3 では0件を予想していたのですが、結果は1 と同じになりました。

Oracle ではDDL文や Truncate Table は暗黙のコミットが発生するため、
Rollbackを行っても当然処理は戻りませんでした。
しかしどうやらSQL Server ではTransaction 管理下ではRollback が可能なようです。

ちなみに試みにDDL も同様に試してみたのですが、Create Table も Drop Table も
全てRollback を行うとTransaction 開始時点に戻ってしまいました。

このあたり、やはりOracle とはだいぶ違うのですね。

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

photo
takayama