共用方式為


使用 TRUNCATE TABLE 刪除所有資料列

TRUNCATE TABLE 陳述式是一種快速且非記錄式的方法,它會刪除資料表中的所有資料列。TRUNCATE TABLE 在功能上相當於沒有 WHERE 子句的 DELETE 陳述式。不過,TRUNCATE TABLE 的速度更快,且所使用的系統及交易記錄檔資源更少。

與 DELETE 陳述式相比,TRUNCATE TABLE 具有下列優點:

  • 使用更少的交易記錄檔空間。
    DELETE 陳述式一次移除一個資料列,且在交易記錄檔中會對每一個刪除的資料列記錄一個項目。TRUNCATE TABLE 會藉由取消用來儲存資料表資料及記錄之資料頁的配置來移除資料,且只有取消配置的頁面會記錄在交易記錄檔中。
  • 通常會使用更少的鎖定。
    使用資料列鎖定來執行 DELETE 陳述式時,會鎖定資料表中的每一個資料列以進行刪除。TRUNCATE TABLE 一律會鎖定資料表及分頁,但不會鎖定每一個資料列。
  • 如果沒有例外狀況,資料表中不會留下任何分頁。
    執行 DELETE 陳述式後,資料表仍可包含空的分頁。例如,若沒有至少一個獨佔 (LCK_M_X) 資料表鎖定,則無法將堆積中的空分頁取消配置。如果刪除作業未使用資料表鎖定,則資料表 (堆積) 將包含許多空的分頁。若為索引,雖然刪除作業可能會留下空的分頁,但背景清除程序很快就會取消配置這些分頁。

使用 DELETE 時,資料庫中仍會保留以 TRUNCATE TABLE 清空之資料表的定義,以及其索引及其他相關聯的物件。

截斷大型資料表

Microsoft SQL Server 2005 可讓您卸除或截斷有 128 個以上範圍的資料表,而不會對卸除所需的所有範圍同時保留鎖定。如需詳細資訊,請參閱<卸除和重建大型物件>。

範例

下列範例會移除 JobCandidate 資料表的所有資料。TRUNCATE TABLE 陳述式前後會包含 SELECT 陳述式,以比較結果。

USE AdventureWorks;
GO
SELECT COUNT(*) AS BeforeTruncateCount 
FROM HumanResources.JobCandidate;
GO
TRUNCATE TABLE HumanResources.JobCandidate;
GO
SELECT COUNT(*) AS AfterTruncateCount 
FROM HumanResources.JobCandidate;
GO

請參閱

概念

使用 DELETE 刪除資料列
刪除結果集中的資料列
使用 TOP 來限制刪除的資料列

其他資源

DROP TABLE (Transact-SQL)
TRUNCATE TABLE (Transact-SQL)

說明及資訊

取得 SQL Server 2005 協助