TRUNCATE TABLE 문은 SQL Server의 테이블에서 모든 레코드를 삭제하는 데 사용됩니다. 이 명령은 DELETE 명령과 유사하지만 WHERE 절 없이 작동합니다.
SQL Server의 TRUNCATE TABLE 명령 구문
TRUNCATE TABLE [ten_CSDL.] [ten_schema.] ten_bang
[ WITH (PARTITIONS (so_phanvung
| so _phanvung TO so _p
| so _phanvung TO so _p
hanvung)];
변수 이름 또는 변수 값
ten_CSDL
그것은 당신에게 달려 있습니다. 지정된 경우 데이터베이스의 이름입니다.
ten_scheme
옵션. 테이블이 속한 스키마(스키마 또는 네임스페이스로 변환)의 이름입니다.
ten_bang
기록을 삭제하려는 테이블입니다.
WITH(PARTITIONS(so_phanvung | so _phanvung TO so _phanvung)
선택 사항이며 파티션 테이블에만 사용할 수 있습니다. 지정된 경우 so_phanvung은 이 테이블에서 삭제하려는 영역의 번호입니다. 여러 영역을 삭제하려면 쉼표를 사용하여 값 또는 숫자 파티션 값 범위를 구분합니다. 분할되지 않은 테이블과 함께 이 절을 사용하면 SQL Server에서 오류를 보고합니다. 이 기능은 일부 SQL Server 버전에서 사용할 수 없습니다.
참고
- 테이블의 모든 레코드를 삭제하면 모든 indentity 열의 카운터가 처음부터 반복됩니다.
- 외래 키가 참조하는 테이블의 모든 레코드를 삭제할 수 없습니다.
- 테이블의 전체 레코드를 삭제하기 전에 ALTER TABLE과 같은 우선순위를 가져야 합니다.
예:
SQL Server에서 데이터를 검색할 필요가 없다면 전체 레코드를 삭제하는 것이 가장 빠른 방법입니다. 테이블이 TRUNCATE인 경우 삭제된 행은 기록되지 않으므로 이전 작업으로 되돌릴 수 없습니다. TRUNCATE는 DROP 명령으로 테이블을 삭제하거나 CREATE로 새 테이블을 만드는 것보다 쉽습니다. 아래 예를 참조하십시오.
TRUNCATE TABLE;
이 예는 테이블의 모든 레코드를 삭제합니다.
위 명령어는 아래 DELETE 명령어와 동일합니다.
DELETE FROM nhanvien;
이 두 명령 모두 테이블의 모든 데이터를 삭제합니다. 차이점은 DELETE 명령을 사용하면 TRUNCATE를 유지하려는 경우 삭제하기 전에 작업으로 돌아갈 수 있다는 것입니다.
데이터베이스 이름으로 다른 예를 보겠습니다.
TRUNCATE TABLE totn.danhba;
이 예는 totn이라는 데이터베이스의 모든 목록 항목을 삭제합니다.
예:파티션 사용
1 또는 1 지역 레코드를 삭제하려면 WITH PARTITIONS 절과 함께 TRUNCATE TABLE 명령을 사용하십시오.
TRUNCATE TABLE nhanvien
WITH (PARTITIONS (1 ~ 5, 7));
이 예에서 테이블은 파티션 테이블이고 TRUNCATE TABLE 문은 이 테이블에서 1에서 5까지의 지역 레코드와 영역 7을 삭제합니다.
자주 묻는 질문
질문: SQL Server에서 TRUNCATE TABLE 명령을 실행한 후 데이터베이스를 이전 상태(롤백)로 백업할 수 있습니까?
답변: TRUNCATE TABLE 명령은 트랜잭션을 사용하여 롤백할 수 있습니다. 아래와 같은 예입니다.
CREATE TABLE bang_test (cot1 int);
INSERT INTO bang_test VALUES (1);
INSERT INTO bang_test VALUES (2);
INSERT INTO bang_test VALUES (3);
-- Tạo chuyển tiếp
BEGIN TRAN;
-- Xóa bản ghi trong bảng
TRUNCATE TABLE dbo.bảng_test;
-- Rollback bảng đã xóa bản ghi
ROLLBACK;
SELECT * FROM bang_
test;
위의 SELECT 문은 아래 레코드의 결과를 반환합니다.
cot1
----------
1
2
3
따라서 데이터베이스 상태가 이전 상태로 복원되었으며 state_test에 3개의 레코드가 남아 있습니다.