====== トランザクションで使用できるステートメント ======
以下のステートメント以外はトランザクションでロールバックすることが可能である。
|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 行処理されました)
***** 終了処理 *****
参考文献:
[[http://msdn.microsoft.com/ja-jp/library/ms191544.aspx|トランザクションで使用できる Transact-SQL ステートメント]] - MSDN