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.1252285715.txt.gz
  • 最終更新: 2019/05/18 02:23
  • (外部編集)