Truncate table 清除表內容

TRUNCATE TABLE

刪除表中的所有行,而不記錄單個行刪除操作。TRUNCATE TABLE 與沒有 WHERE 子句的 DELETE 語句類似;但是,TRUNCATE TABLE 速度更快,使用的系統資源和事務日誌資源更少。

語法
[ { database_name.[ schema_name ]. | schema_name . } ]
table_name
[ ; ]
參數
database_name
數據庫的名稱。
schema_name
表所屬架構的名稱。
table_name
要截斷的表的名稱,或要刪除其全部行的表的名稱。

備註
與 DELETE 語句相比,TRUNCATE TABLE 具有以下優點:

所用的事務日誌空間較少。
DELETE 語句每次刪除一行,並在事務日誌中爲所刪除的每行記錄一個項。TRUNCATE TABLE 通過釋放用於存儲表數據的數據頁來刪除數據,並且在事務日誌中只記錄頁釋放。
使用的鎖通常較少。
當使用行鎖執行 DELETE 語句時,將鎖定表中各行以便刪除。TRUNCATE TABLE 始終鎖定表和頁,而不是鎖定各行。
如無例外,在表中不會留有任何頁。
執行 DELETE 語句後,表仍會包含空頁。例如,必須至少使用一個排他 (LCK_M_X) 表鎖,才能釋放堆中的空表。如果執行刪除操作時沒有使用表鎖,表(堆)中將包含許多空頁。對於索引,刪除操作會留下一些空頁,儘管這些頁會通過後臺清除進程迅速釋放。
TRUNCATE TABLE 刪除表中的所有行,但表結構及其列、約束、索引等保持不變。若要刪除表定義及其數據,請使用 DROP TABLE 語句。
如果表包含標識列,該列的計數器重置爲該列定義的種子值。如果未定義種子,則使用默認值 1。若要保留標識計數器,請使用 DELETE。
限制
不能對以下表使用 TRUNCATE TABLE:
由 FOREIGN KEY 約束引用的表。(您可以截斷具有引用自身的外鍵的表。)
參與索引視圖的表。
通過使用事務複製或合併複製發佈的表。
對於具有以上一個或多個特徵的表,請使用 DELETE 語句。
TRUNCATE TABLE 不能激活觸發器,因爲該操作不記錄各個行刪除。

示例:


USE AdventureWorks;
GO
SELECT COUNT(*) AS BeforeTruncateCount
FROM HumanResources.JobCandidate;
GO
TRUNCATE TABLE HumanResources.JobCandidate;
GO
SELECT COUNT(*) AS AfterTruncateCount
FROM HumanResources.JobCandidate;
GO
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章