Sql-Server

何時更喜歡截斷而不是批量刪除?

  • July 16, 2015

當我瀏覽 DBA-Reactions 時,我幾乎了解所有的 .gif,但使用這個我遇到了麻煩:

https://twitter.com/DBAReactions/status/613840893322338304

我的意思是 truncate 顯然不會像批量刪除那樣創建事務日誌,但在某些情況下,您仍然可以確定可以簡單地截斷一個完整的表。除此之外還有其他顧慮嗎?所以基本上我很想了解完全的區別。

在某些情況下,您不能使用 TRUNCATE TABLE 命令,而必須使用 DELETE 命令。

您不能在以下表上使用 TRUNCATE TABLE:

• 由 FOREIGN KEY 約束引用。(您可以截斷具有引用自身的外鍵的表。)

• 參與索引視圖。

• 通過使用事務複製或合併複製發布。

對於具有這些特徵中的一個或多個的表,請改用 DELETE 語句。

TRUNCATE TABLE 無法啟動觸發器,因為該操作不記錄單個行刪除。有關詳細資訊,請參閱創建觸發器 (Transact-SQL)。

MSDN上有一個很好的解釋:

https://msdn.microsoft.com/en-gb/library/ms177570.aspx

另外,請參閱Stack Overflow 上的這個問題,該問題對此主題進行了長時間的討論。

引用自:https://dba.stackexchange.com/questions/107166