database:sqlserver:statements_allowed_in_transactions

トランザクションで使用できるステートメント

 以下のステートメント以外はトランザクションでロールバックすることが可能である。

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

  • database/sqlserver/statements_allowed_in_transactions.txt
  • 最終更新: 2019/05/18 02:23
  • by 非ログインユーザー