[CREATE PROCEDURE] (Transact-SQL)

ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.zh-CHT/tsqlref9/html/afe3d86d-c9ab-44e4-b74d-4e3dbd9cc58c.htm

[TRUNCATE TABLE] (Transact-SQL)

ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.zh-CHT/tsqlref9/html/3d544eed-3993-4055-983d-ea334f8c5c58.htm
從資料表中移除所有資料列,且不記錄個別資料列的刪除動作。TRUNCATE TABLE 功能和不含 WHERE 子句的 DELETE 陳述式相同;不過,TRUNCATE TABLE 比較快,使用的系統資源和交易記錄資源也比較少。
相較於 DELETE 陳述式,TRUNCATE TABLE 的優點如下:

  • 使用的交易記錄空間較少。
  • DELETE 陳述式每次會移除一個資料列,在交易記錄中,每個刪除的資料列都會記錄一個項目。TRUNCATE TABLE 會取消配置用來儲存資料表資料的資料頁,以移除資料,交易記錄只會記錄頁面的取消配置。
  • 通常會使用較少鎖定。
  • 當利用資料列鎖定來執行 DELETE 陳述式時,會鎖定資料表中的每個資料列,以便進行刪除。TRUNCATE TABLE 一律會鎖定資料表和頁面,但不會鎖定每個資料列。
  • 零頁面會保留在資料表中,沒有例外。
  • 在執行 DELETE 陳述式之後,資料表仍可以包含空白頁。例如,當沒有至少一項獨佔 (LCK_M_X) 資料表鎖定時,無法取消配置堆積中的空白頁。如果刪除作業並未使用資料表鎖定,資料表 (堆積) 會包含許多空白頁。對於索引,刪除作業可能會留下空白頁,不過,背景清除處理序很快就會取消配置這些頁面。

TRUNCATE TABLE 會移除資料表中的所有資料列,但會保留資料表結構及其資料行、條件約束、索引等。若要移除資料表的資料之外,還要移除資料表定義,請使用 DROP TABLE 陳述式。
如果資料表包含識別資料行,這個資料行的計數器會重設為定義給這個資料行的初始值。如果未定義任何初始值,就會使用預設值 1。若要識別計數器,請改用 DELETE。