Truncate là gì

TRUNCATE TABLE được hiểu là một lệnh nhằm xóa tất cả dữ liệu trong 1 bảng của SQL Server. Ngoài ra bạn cũng có thể sử dụng DROP TABLE để xóa toàn bộ bảng nhưng tôi khuyên bạn nên hạn chế sử dụng lệnh này nếu chưa hiểu rõ.

1. Cú pháp lệnh TRUNCATE TABLE

Cú pháp cơ bản của lệnh TRUNCATE TABLE:

1 TRUNCATE TABLE table_name;

Khi đó table_name là tên của bạn muốn xóa dữ liệu.

Ngoài ra bạn cũng có thể áp dụng lệnh ở cú pháp nâng cao hơn như sau:

TRUNCATE TABLE [ten_CSDL.] [ten_schema.] ten_bang

[ WITH (PARTITIONS (so_phanvung

| so _phanvung TO so _phanvung ) ] ;

Ở phần 2 tôi sẽ phân tích kỹ hơn các giá trị cũng như là tên biến của cú pháp nâng cao này hơn.

2. Tên biến hoặc giá trị biến

ten_CSDL

Tùy bạn chọn như thế nào. Đây là tên của CSDL được bạn đặt

Ten_schema

Tương tự như ten_CSDL đây là tên của SCHEMA. Tôi cũng đã viết một bài viết chi tiết về SCHEMA trong SQL Server bạn có thể tìm và tham khảo qua (Internal link nè)

ten_bang

Đây là tên bảng mà bạn sẽ chọn để xóa các dữ liệu

WITH (PARTITIONS (so_phanvung | so_phanvung TO so_phanvung)

Cũng tương tự như 2 biến trên. Bạn có thể dùng với bảng phân vùng và sử dụng thêm so_phanvung để xác định số vùng mà mình muốn xóa trong bảng đó.

Nếu muốn xóa nhiều vùng, hãy dùng dấu (,) để tách các giá trị khoảng giá trị.Tuy nhiên lệnh sẽ lỗi khi bạn sử dụng đối với những bảng không được phân vùng. Tùy các phiên bản SQL khác nhau sẽ có hoặc không có tình năng này.

Lưu ý:

  • Không xóa được toàn bộ dữ liệu trong bảng được tham chiếu bằng Foreign Key.
  • Trước khi xóa toàn bộ dữ liệu,bạn phải có quyền ưu tiên như ALTER TABLE
  • Bộ đếm ở toàn bộ cột tự tăng giá trị sẽ quay lại từ đầu nếu bạn xóa toàn bộ dữ liệu trong bảng.

Ví Dụ:

Ví dụ 1

Trong SQL Server nếu như bạn không muốn lấy lại các dữ liệu thì xóa toàn bộ bảng là cách nhanh nhất. Sẽ có 2 lệnh xóa là DELETE và TRUNCATE, khác ở chỗ là với DELETE bạn có thể hoàn tác còn TRUNCATE sẽ “một đi không trở lại”.

Với TRUNCATE cũng đơn giản hơn khi xóa bằng lệnh DROP hay tạo bằng CREATE.

Ví dụ tôi muốn xóa bảng “hangtonkho” tôi có thể làm như sau

DELETE FROM hangtonkho;

Hoặc

TRUNCATE TABLE hangtonkho;

Ngoài ra cũng có thể xóa dữ liệu có điều kiện như sau

TRUNCATE TABLE totn.hangtonkho;

Với lệnh này tôi sẽ xóa các dữ liệu có tên totn trong bảng hangtonkho

Ví dụ 2 phân vùng

Áp dụng cú pháp cho bảng có phân vùng, ta sử dụng thêm mệnh đề WITH PARTITIONS cùng lệnh TRUNCATE TABLE

TRUNCATE TABLE hangtonkho

WITH (PARTITIONS (1 TO 5, 7) );

Ở hàm này tôi sẽ xóa các dữ liệu từ vùng 1-5 và vùng 7 trong bảng hangtonkho

3. Câu hỏi thường gặp

Nếu sử dụng lệnh TRUNCATE TABLE tôi có thể hoàn tác để lấy lại dữ liệu hay không?

Có nhưng khá phức tạp với cách chuyển tiếp để rollback. Ví dụ:

CREATE TABLE bang_nhap (cot1 int);

INSERT INTO bang_nhap VALUES (1);

INSERT INTO bang_nhap VALUES (2);

INSERT INTO bang_nhap VALUES (3);

— Tạo chuyển tiếp

BEGIN TRAN;

— Xóa bản ghi trong bảng

TRUNCATE TABLE dbo.bảng_nháp;

— Rollback bảng đã xóa bản ghi

ROLLBACK;

SELECT * FROM bang_nhap;

Lệnh SELECT nói trên sẽ trả về kết quả sau

cot1

———-

1

2

3

Như vậy là bạn đã có thể hoàn tác và 3 dữ liệu sẽ trở về bang_nhap.

Kiến thức nền về TRUNCATE TABLE trong SQL Server đã xong. Cùng đón đọc các bài viết tiếp theo của tôi để có thể làm việc với SQL một cách đơn giản hơn nhé.