Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Sistem Platform Analitik (PDW)
Gudang di Microsoft Fabric
Database SQL di Microsoft Fabric
Menghapus semua baris dari tabel atau partisi tabel tertentu, tanpa mencatat penghapusan baris individual.
TRUNCATE TABLE mirip DELETE dengan pernyataan tanpa WHERE klausul; namun, TRUNCATE TABLE lebih cepat dan menggunakan lebih sedikit sistem dan sumber daya log transaksi.
Syntax
Sintaks untuk SQL Server, Azure SQL Database, Fabric SQL database
TRUNCATE TABLE
{ database_name.schema_name.table_name | schema_name.table_name | table_name }
[ WITH ( PARTITIONS ( { <partition_number_expression> | <range> }
[ , ...n ] ) ) ]
[ ; ]
<range> ::=
<partition_number_expression> TO <partition_number_expression>
Sintaks untuk Microsoft Fabric, Azure Synapse Analytics, dan Gudang Data Paralel.
TRUNCATE TABLE { database_name.schema_name.table_name | schema_name.table_name | table_name }
[ ; ]
Arguments
database_name
Nama database.
schema_name
Nama skema tempat tabel berada.
table_name
Nama tabel yang akan dipotong atau dari mana semua baris dihapus.
table_name harus harfiah.
table_name tidak boleh fungsi OBJECT_ID() atau variabel.
WITH ( PARTISI ( { <partition_number_expression | ><range> } [ , ... n ] ) )
Berlaku untuk: SQL Server 2016 (13.x) dan versi yang lebih baru.
Menentukan partisi yang akan dipotong atau dari mana semua baris dihapus. Jika tabel tidak dipartisi, WITH PARTITIONS argumen akan menghasilkan kesalahan.
WITH PARTITIONS Jika klausa tidak disediakan, seluruh tabel dipotong.
<partition_number_expression> dapat ditentukan dengan cara berikut:
Berikan jumlah partisi, misalnya:
WITH (PARTITIONS (2))Berikan nomor partisi untuk beberapa partisi individual yang dipisahkan oleh koma, misalnya:
WITH (PARTITIONS (1, 5))Berikan rentang dan partisi individual, misalnya:
WITH (PARTITIONS (2, 4, 6 TO 8))<range>dapat ditentukan sebagai nomor partisi yang dipisahkan oleh kataTO, misalnya:WITH (PARTITIONS (6 TO 8))
Untuk memotong tabel yang dipartisi, tabel dan indeks harus diratakan (dipartisi pada fungsi partisi yang sama).
Remarks
Dibandingkan DELETE dengan pernyataan, TRUNCATE TABLE memiliki keuntungan berikut:
Ruang log transaksi yang digunakan lebih sedikit.
Pernyataan
DELETEmenghapus baris satu per satu dan merekam entri dalam log transaksi untuk setiap baris yang dihapus.TRUNCATE TABLEmenghapus data dengan membatalkan alokasi halaman data yang digunakan untuk menyimpan data tabel dan indeks dan hanya merekam alokasi halaman dalam log transaksi.Kunci yang digunakan biasanya lebih sedikit.
DELETESaat pernyataan dijalankan menggunakan kunci baris, setiap baris dalam tabel dikunci untuk dihapus.TRUNCATE TABLEselalu mengunci tabel (termasuk kunci skema (SCH-M) dan halaman, tetapi tidak setiap baris.Tanpa pengecualian, nol halaman dibiarkan dalam tabel atau indeksnya.
DELETESetelah pernyataan dijalankan, tabel masih dapat berisi halaman kosong. Misalnya, halaman kosong dalam timbunan tidak dapat dibatalkan alokasinya tanpa setidaknya kunci tabel eksklusif (LCK_M_X). Jika operasi penghapusan tidak menggunakan kunci tabel, tabel (timbunan) mungkin berisi banyak halaman kosong. Untuk indeks,DELETEpernyataan dapat meninggalkan halaman kosong di belakang. Proses pembersihan latar belakang kemudian membatalkan alokasi halaman ini.
TRUNCATE TABLE menghapus semua baris dari tabel, tetapi struktur tabel dan kolomnya, batasan, indeks, dan sebagainya, tetap ada. Untuk menghapus definisi tabel selain datanya, gunakan DROP TABLE pernyataan .
Jika tabel berisi kolom identitas, penghitung untuk kolom tersebut diatur ulang ke nilai awal yang ditentukan untuk kolom. Jika tidak ada seed yang ditentukan, nilai 1 default akan digunakan. Untuk mempertahankan penghitung identitas, gunakan DELETE sebagai gantinya.
TRUNCATE TABLE Operasi dapat digulung balik dalam transaksi.
Dalam database Fabric SQL, memotong tabel akan menghapus semua data cermin dari Fabric OneLake untuk tabel tersebut.
Dealokasi yang ditangguhkan
Saat tabel yang menggunakan 128 tingkat atau lebih dipotong, Mesin Database menuguhkan alokasi halaman aktual, dan kunci terkaitnya, hingga setelah transaksi dilakukan. Pemotongan terjadi dalam dua fase terpisah: logis dan fisik. Dalam fase logis, unit alokasi yang ada yang digunakan oleh tabel dan indeksnya ditandai untuk dealokasi dan dikunci hingga transaksi dilakukan. Dalam fase fisik, proses latar belakang menghapus halaman yang ditandai untuk pembatalan alokasi. Ini berarti bahwa ruang yang dirilis oleh TRUNCATE TABLE mungkin tidak segera tersedia untuk alokasi baru.
Jika pemulihan database yang dipercepat diaktifkan, pemotongan menggunakan fase logis dan fisik terpisah terlepas dari jumlah tingkatannya.
Limitations
Anda tidak dapat menggunakan TRUNCATE TABLE pada tabel yang:
Dirujuk oleh
FOREIGN KEYbatasan. Anda dapat memotong tabel yang memiliki kunci asing yang merujuk dirinya sendiri.Berpartisipasi dalam tampilan terindeks.
Diterbitkan dengan menggunakan replikasi transaksional atau replikasi penggabungan.
Berversi sistem sementara.
Dirujuk oleh
EDGEbatasan.
Untuk tabel dengan satu atau beberapa karakteristik ini, gunakan pernyataan sebagai gantinya DELETE .
TRUNCATE TABLE tidak dapat mengaktifkan pemicu karena operasi tidak mencatat penghapusan baris individual. Untuk informasi selengkapnya, lihat CREATE TRIGGER (Transact-SQL).
Di Azure Synapse Analytics and Analytics Platform System (PDW):
TRUNCATE TABLEtidak diizinkan dalamEXPLAINpernyataan.TRUNCATE TABLEtidak dapat dijalankan di dalam transaksi.
Permissions
Izin minimum yang diperlukan ada ALTER di table_name.
TRUNCATE TABLE izin default ke pemilik tabel, anggota sysadmin peran server tetap, dan db_owner peran database tetap, db_ddladmin dan tidak dapat ditransfer. Namun, Anda dapat memasukkan pernyataan TRUNCATE TABLE di dalam modul, seperti prosedur tersimpan, dan memberikan izin yang sesuai ke modul menggunakan klausul EXECUTE AS.
Examples
A. Memotong tabel
Contoh berikut menghapus semua data dari JobCandidate tabel.
SELECT pernyataan disertakan sebelum dan sesudah pernyataan untuk membandingkan TRUNCATE TABLE hasil.
USE AdventureWorks2022;
SELECT COUNT(*) AS BeforeTruncateCount
FROM HumanResources.JobCandidate;
TRUNCATE TABLE HumanResources.JobCandidate;
SELECT COUNT(*) AS AfterTruncateCount
FROM HumanResources.JobCandidate;
B. Memotong partisi tabel
Berlaku untuk: SQL Server 2016 (13.x) dan versi yang lebih baru.
Contoh berikut memotong partisi tertentu dari tabel yang dipartisi. Sintaks WITH (PARTITIONS (2, 4, 6 TO 8)) menyebabkan nomor partisi 2, 4, 6, 7, dan 8 dipotong.
TRUNCATE TABLE PartitionTable1
WITH (PARTITIONS (2, 4, 6 TO 8));
GO
C. Mengembalikan operasi pemotongan
Contoh berikut menunjukkan bahwa TRUNCATE TABLE operasi di dalam transaksi dapat digulung balik.
Buat tabel pengujian dengan tiga baris.
USE [tempdb]; CREATE TABLE TruncateTest (ID INT IDENTITY (1, 1) NOT NULL); GO INSERT INTO TruncateTest DEFAULT VALUES; GO 3Periksa data sebelum memotong.
SELECT ID FROM TruncateTest;Potong tabel dalam transaksi, dan periksa jumlah baris.
BEGIN TRANSACTION; TRUNCATE TABLE TruncateTest; SELECT ID FROM TruncateTest;Anda melihat bahwa tabel kosong.
Gulung balik transaksi dan periksa data.
ROLLBACK TRANSACTION; SELECT ID FROM TruncateTest;Anda melihat ketiga baris.
Bersihkan meja.
DROP TABLE TruncateTest;