先日、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 とはだいぶ違うのですね。