以下のステートメント以外はトランザクションでロールバックすることが可能である。
ALTER DATABASE | DROP DATABASE | ALTER FULLTEXT CATALOG | DROP FULLTEXT CATALOG | ALTER FULLTEXT INDEX | DROP FULLTEXT INDEX |
BACKUP | RECONFIGURE | CREATE DATABASE | RESTORE | CREATE FULLTEXT CATALOG | UPDATE STATISTICS |
CREATE FULLTEXT INDEX |
DROP TABLE がロールバック可能であることを実験してみる。
PRINT '***** テーブル作成 *****' CREATE TABLE drop_tran_test( col1 CHAR(2) NULL, col2 CHAR(3) NULL ) PRINT '***** テーブル存在確認 *****' SELECT name, object_id FROM sys.objects WHERE object_id = OBJECT_ID('drop_tran_test') PRINT '***** トランザクション開始 *****' BEGIN TRAN PRINT '***** テーブル削除 *****' DROP TABLE drop_tran_test PRINT '***** テーブル存在確認 *****' SELECT name, object_id FROM sys.objects WHERE object_id = OBJECT_ID('drop_tran_test') PRINT '***** ロールバック *****' ROLLBACK TRAN PRINT '***** テーブル存在確認 *****' SELECT name, object_id FROM sys.objects WHERE object_id = OBJECT_ID('drop_tran_test') PRINT '***** 終了処理 *****' DROP TABLE drop_tran_test
以下は実行結果である。
***** テーブル作成 ***** ***** テーブル存在確認 ***** name object_id -------------- ----------- drop_tran_test 69575286 (1 行処理されました) ***** トランザクション開始 ***** ***** テーブル削除 ***** ***** テーブル存在確認 ***** name object_id --------------- ----------- (0 行処理されました) ***** ロールバック ***** ***** テーブル存在確認 ***** name object_id --------------- ----------- drop_tran_test 69575286 (1 行処理されました) ***** 終了処理 *****
参考文献: トランザクションで使用できる Transact-SQL ステートメント - MSDN