1. ホーム
  2. データベース
  3. mssql2005

SQL ServerでTRUNCATEトランザクションをロールバックする方法

2022-01-20 16:27:35

一般に、TRUNCATE はロールバックしない操作であり、テーブルのすべてのデータを削除し、Identity 列をリセットすると考えられています。

トランザクションの中でTRUNCATE操作を行うと、ロールバックすることができます。逆に言えば、ログ・ファイル・ファイルからデータを復元することはできない。また、ログファイルには削除されたデータは記録されず、データページのセル割り当てがログに記録されるだけである。

上記の内容を次の例で説明します。      

コピーコード コードは以下の通りです。
USE temp_test_database
GO
-- Create a temporary table
CREATE TABLE TruncateTabel(ID INT)
INSERT INTO TruncateTabel(ID)
SELECT 1
UNION ALL
SELECT 2
UNION ALL
SELECT 3
GO

コピーコード コードは以下の通りです。
--check the inserted data
SELECT * FROM TruncateTabel

ご覧のとおりです。

トランザクションの開始

コピーコード コードは以下の通りです。

--Start the transaction
BEGIN TRAN
TRUNCATE TABLE TruncateTabel
GO
-- Check TruncateTable before rolling back
SELECT * FROM TruncateTabel
GO

F5は以下のように実行されます。

ロールバックトランザクションの実行

コピーコード コードは以下の通りです。
--rollback transaction
ROLLBACK TRAN
GO

TruncateTableテーブルを再度確認する

コピーコード コードは以下の通りです。
--check TruncateTable again after rollback
SELECT * FROM TruncateTabel
GO

F5は以下のように実行されます。

要約すると、トランザクションはTRUNCATE操作のためにロールバックすることができます。