Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> SQL Server

คำสั่ง TRUNCATE TABLE ใน SQL Server

TRUNCATE TABLE ใช้ทำอะไร?

ลบ ทุกแถว ในตารางอย่างรวดเร็ว ไม่มี WHERE clause คล้าย DELETE แต่ไม่ logging ต่อแถว (Minimal logging) เร็วกว่าและใช้ transaction log น้อยกว่า

รูปแบบคำสั่ง

TRUNCATE TABLE [database_name.][schema_name.]table_name
[WITH (PARTITIONS (partition_number | range))];

พารามิเตอร์

  • database_name, schema_name: ระบุได้ (optional)
  • WITH (PARTITIONS ...): ลบเฉพาะ partition ที่ระบุ (ตาราง partitioned เท่านั้น)

ข้อสังเกตสำคัญ

  1. Identity counter จะ reset เริ่มนับใหม่จาก seed
  2. ไม่สามารถ TRUNCATE ตารางที่ถูก FK อ้างอิงได้ (ต้อง drop FK ก่อน)
  3. ต้องมีสิทธิ์ ALTER TABLE บนตาราง
  4. ไม่ยิง AFTER DELETE trigger
  5. ไม่สามารถระบุ WHERE ได้

ตัวอย่าง

ลบทั้งตาราง

TRUNCATE TABLE nhanvien;

เทียบเท่า DELETE FROM nhanvien; แต่เร็วกว่าและไม่ rollback ได้ (นอกเหนือจากอยู่ใน explicit transaction)

ระบุฐานข้อมูล

TRUNCATE TABLE totn.dbo.danhba;

ลบ Partition เฉพาะ

TRUNCATE TABLE nhanvien
WITH (PARTITIONS (1 TO 5, 7));

ลบ partition 1-5 และ 7 (ตารางต้องเป็น partitioned table)

Rollback ได้ไหม?

ได้ หากอยู่ใน Explicit Transaction:

BEGIN TRAN;
TRUNCATE TABLE dbo.bang_test;
ROLLBACK;
-- ข้อมูลยังคงอยู่

สรุป: ใช้ TRUNCATE เมื่อต้องการล้างตารางทั้งหมด เร็วกว่า DELETE มาก แต่มีข้อจำกัด (FK, Trigger, Identity reset)