| 特性 | DELETE | TRUNCATE |
|---|---|---|
| 觸發器 | 啟動 AFTER DELETE 觸發器 | 不啟動 任何觸發器 |
| 日誌記錄 | 逐列記錄(可回滾) | 僅記錄頁釋放(最小日誌) |
| 身分識別種子 | 保留 | 重置為種子值 |
| 外鍵限制 | 受參考完整性約束 | 若被參考則不可用 |
| 速度 | 較慢(大量資料) | 極快(元資料操作) |
| 可回滾 | 是 | 是(在交易中) |
-- 父表 CREATE TABLE Table1 (ID INT NOT NULL, FOID INT NOT NULL); INSERT INTO Table1 VALUES (1,101),(2,102),(3,103),(4,104); -- 子表 CREATE TABLE Table2 (FOID INT NOT NULL); INSERT INTO Table2 VALUES (101),(102),(103),(104); -- 觸發器:刪除父表同步刪除子表 CREATE TRIGGER TG_Table1 ON Table1 AFTER DELETE AS DELETE TA FROM Table2 TA JOIN deleted TB ON TA.FOID = TB.FOID;
DELETE FROM Table1 WHERE ID = 1; SELECT * FROM Table1; -- 剩 2,3,4 SELECT * FROM Table2; -- 101 被級聯刪除

TRUNCATE TABLE Table1; SELECT * FROM Table1; -- 空 SELECT * FROM Table2; -- 101,102,103,104 全保留!

CHECKPOINT; DELETE FROM Table2 WHERE FOID = 102; SELECT * FROM fn_dblog(NULL,NULL) WHERE Operation = 'LOP_DELETE_ROWS';

CHECKPOINT; TRUNCATE TABLE Table2; SELECT * FROM fn_dblog(NULL,NULL) WHERE Operation = 'LOP_DELETE_ROWS';

觀察:TRUNCATE 無 LOP_DELETE_ROWS 記錄,僅有頁釋放操作(LOP_DEALLOC_EXTENT 等),故不觸發觸發器。
DELETE 分批 + 索引,或 SWITCH PARTITION(Enterprise 版)。