首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> SQL Server 2005

SQL Server TRUNCATE TABLE 交易回滾實測:在交易中可回滾、外部不可回滾

     編輯:SQL Server 2005

迷思釐清

許多人以為 TRUNCATE TABLE 不可回滾。實則:**在明確交易中執行 TRUNCATE 可回滾**;若無交易包裹,則立即認可且無法從記錄檔還原 (僅記錄頁面配置解除配置)。

實測步驟

USE temp_test_database; GO
CREATE TABLE TruncateTabel (ID INT);
INSERT TruncateTabel VALUES (1),(2),(3); GO

-- 確認資料
SELECT * FROM TruncateTabel;  -- 3 列

初始資料

-- 開始交易並 TRUNCATE
BEGIN TRAN;
TRUNCATE TABLE TruncateTabel; GO

-- 回滾前檢查 → 0 列
SELECT * FROM TruncateTabel; GO

TRUNCATE 後交易內查詢為空

-- 回滾交易
ROLLBACK TRAN; GO

-- 回滾後檢查 → 3 列恢復
SELECT * FROM TruncateTabel; GO

回滾後資料恢復

結論

  • TRUNCATE 在交易中完全可回滾,SQL Server 會將頁面解除配置記錄於交易記錄,回滾時重新配置頁面並恢復資料。
  • 若需大量刪除且可回滾,BEGIN TRAN; TRUNCATE TABLE ...; COMMIT/ROLLBACK 是高效選擇 (比 DELETE 少記錄、不觸發 Trigger、重設 Identity)。
  • 無交易包裹時,TRUNCATE 為非記錄作業 (最小記錄),不可回滾。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved