Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
Azure Synapse Analytics
Elemzési platformrendszer (PDW)
Raktár a Microsoft Fabricben
SQL-adatbázis a Microsoft Fabricben
Eltávolítja az összes sort egy táblából vagy egy tábla megadott partíciójából anélkül, hogy naplózta az egyes sorok törlését.
TRUNCATE TABLE hasonló a DELETE utasításhoz, WHERE záradék nélkül; azonban TRUNCATE TABLE gyorsabb, és kevesebb rendszer- és tranzakciónapló-erőforrást használ.
Transact-SQL szintaxis konvenciói
Syntax
Szintaxis az SQL Serverhez, az Azure SQL Database-hez és a Fabric SQL Database-hez
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>
Szintaxis a Microsoft Fabrichez, az Azure Synapse Analyticshez és a párhuzamos adattárházhoz.
TRUNCATE TABLE { database_name.schema_name.table_name | schema_name.table_name | table_name }
[ ; ]
Arguments
database_name
Az adatbázis neve.
schema_name
Annak a sémának a neve, amelyhez a tábla tartozik.
table_name
A csonkítandó vagy az összes sorból eltávolított tábla neve.
table_name konstansnak kell lennie.
table_name nem lehet OBJECT_ID() függvény vagy változó.
WITH ( PARTÍCIÓK ( { <partition_number_expression> | <tartomány> } [ , ... n ] ) )
A: SQL Server 2016 (13.x) és újabb verziókra vonatkozik.
Megadja a csonkítandó vagy az összes sor eltávolítására szolgáló partíciót. Ha a tábla nincs particionálva, a WITH PARTITIONS argumentum hibát okoz. Ha a WITH PARTITIONS záradék nincs megadva, a teljes táblázat csonkolt lesz.
<partition_number_expression> a következő módokon adhatók meg:
Adja meg egy partíció számát, például:
WITH (PARTITIONS (2))Adja meg a partíciószámokat több, vesszővel elválasztott partícióhoz, például:
WITH (PARTITIONS (1, 5))Adja meg a tartományokat és az egyes partíciókat, például:
WITH (PARTITIONS (2, 4, 6 TO 8))<range>aTOszó által elválasztott partíciószámokként is megadható, például:WITH (PARTITIONS (6 TO 8))
Particionált tábla csonkításához a táblát és az indexeket egymáshoz kell igazítani (ugyanazon a partíciófüggvényen particionálva).
Remarks
A DELETE állításhoz képest a TRUNCATE TABLE a következő előnyökkel jár:
Kevesebb tranzakciónapló-terület van használatban.
A
DELETEutasítás egyenként eltávolítja a sorokat, és minden törölt sorhoz rögzíti a tranzakciónaplóban szereplő bejegyzést.TRUNCATE TABLEaz adatokat úgy távolítja el, hogy felszabadítja a tábla- és indexadatok tárolásához használt adatoldalakat, és csak az oldalelosztókat rögzíti a tranzakciónaplóban.Általában kevesebb zárolást használnak.
Amikor a
DELETEutasítást sorzárolással hajtja végre, a rendszer a tábla minden sorát zárolja törlésre.TRUNCATE TABLEmindig zárolja a táblázatot (beleértve a séma (SCH-M) zárolását) és az oldalt, de nem minden sort.Kivétel nélkül a táblában vagy indexeiben nulla lap marad.
A
DELETEutasítás végrehajtása után a táblázat továbbra is tartalmazhat üres oldalakat. A halom üres lapjai például nem oldhatók fel legalább kizárólagos (LCK_M_X) táblazárolás nélkül. Ha a törlési művelet nem használ táblazárolást, a táblázat (halom) sok üres lapot tartalmazhat. Indexek esetén azDELETEutasítás üres lapokat hagyhat hátra. Ezután egy háttérbeli törlési folyamat felszabadítja ezeket a lapokat.
TRUNCATE TABLE eltávolítja az összes sort egy táblából, de a táblázat szerkezete és oszlopai, megkötései, indexei stb. megmaradnak. Ha az adatokon kívül el szeretné távolítani a tábladefiníciót, használja a DROP TABLE utasítást.
Ha a tábla identitásoszlopot tartalmaz, az oszlop számlálója visszaáll az oszlophoz definiált kezdőértékre. Ha nincs meghatározva mag, a rendszer az alapértelmezett 1 értéket használja. Az identitásszámláló megőrzéséhez használja inkább a DELETE.
Egy TRUNCATE TABLE művelet visszaállítható egy tranzakción belül.
A Fabric SQL-adatbázisban a tábla csonkolásával törli az adott tábla összes tükrözött adatát a Fabric OneLake-ből.
Halasztott kiosztás
Ha egy 128-as vagy annál nagyobb mértéket használó táblázat csonkolva van, az adatbázismotor a tényleges oldalelosztókat és a hozzájuk tartozó zárolásokat a tranzakció véglegesítéséig kezeli. A csonkolás két külön fázisban történik: logikai és fizikai. A logikai fázisban a tábla és az indexei által használt meglévő foglalási egységek felosztásra vannak megjelölve, és zárolva lesznek, amíg a tranzakció véglegesítésre nem kerül. A fizikai fázisban a háttérfolyamat eltávolítja a felszabadításhoz megjelölt lapokat. Ez azt jelenti, hogy előfordulhat, hogy a felszabadított TRUNCATE TABLE terület nem lesz azonnal elérhető az új foglalásokhoz.
Ha a gyorsított adatbázis-helyreállítás engedélyezve van, a csonkolás a mértékek számától függetlenül külön logikai és fizikai fázisokat használ.
Limitations
Nem használhat TRUNCATE TABLE olyan táblákon, amelyek:
Egy
FOREIGN KEYkényszer hivatkozik gombra. Csonkíthat egy olyan táblát, amely egy magára mutató idegen kulccsal rendelkezik.Vegyen részt egy indexelt nézetben.
A közzététel tranzakciós replikációval vagy egyesítési replikációval történik.
A rendszer verziója időbeli.
Egy
EDGEkényszer hivatkozik gombra.
Egy vagy több ilyen jellemzővel rendelkező táblák esetében használja inkább a DELETE utasítást.
TRUNCATE TABLE nem lehet aktiválni egy eseményindítót, mert a művelet nem naplózza az egyes sorok törlését. További információ: CREATE TRIGGER (Transact-SQL).
Az Azure Synapse Analytics and Analytics platformrendszerben (PDW):
TRUNCATE TABLEnem engedélyezett aEXPLAINutasításban.TRUNCATE TABLEtranzakción belül nem hajtható végre.
Permissions
A minimálisan szükséges engedély a ALTER.
TRUNCATE TABLE a táblatulajdonos, a sysadmin rögzített kiszolgálói szerepkör tagjai, valamint a db_ownerdb_ddladmin rögzített adatbázis-szerepkörök alapértelmezett engedélyei, és nem ruházhatók át. A TRUNCATE TABLE utasítást azonban beépítheti egy modulba, például egy tárolt eljárásba, és a EXECUTE AS záradék használatával megfelelő engedélyeket adhat a modulnak.
Examples
A. Táblázat csonkálása
Az alábbi példa eltávolítja az összes adatot a JobCandidate táblából.
SELECT utasítások a TRUNCATE TABLE utasítás előtt és után jelennek meg az eredmények összehasonlításához.
USE AdventureWorks2022;
SELECT COUNT(*) AS BeforeTruncateCount
FROM HumanResources.JobCandidate;
TRUNCATE TABLE HumanResources.JobCandidate;
SELECT COUNT(*) AS AfterTruncateCount
FROM HumanResources.JobCandidate;
B. Táblapartíciók csonkálása
A: SQL Server 2016 (13.x) és újabb verziókra vonatkozik.
Az alábbi példa csonkolja a particionált tábla megadott partícióit. A WITH (PARTITIONS (2, 4, 6 TO 8)) szintaxis a 2, 4, 6, 7 és 8 partíciószám csonkítását okozza.
TRUNCATE TABLE PartitionTable1
WITH (PARTITIONS (2, 4, 6 TO 8));
GO
C. Csonkolási művelet visszaállítása
Az alábbi példa bemutatja, hogy egy tranzakción belüli TRUNCATE TABLE művelet visszaállítható.
Hozzon létre egy három sorból álló teszttáblát.
USE [tempdb]; CREATE TABLE TruncateTest (ID INT IDENTITY (1, 1) NOT NULL); GO INSERT INTO TruncateTest DEFAULT VALUES; GO 3Ellenőrizze az adatokat a csonkálás előtt.
SELECT ID FROM TruncateTest;Csonkítsa a táblát egy tranzakción belül, és ellenőrizze a sorok számát.
BEGIN TRANSACTION; TRUNCATE TABLE TruncateTest; SELECT ID FROM TruncateTest;Láthatja, hogy a tábla üres.
A tranzakció visszaállítása és az adatok ellenőrzése.
ROLLBACK TRANSACTION; SELECT ID FROM TruncateTest;Mindhárom sor megjelenik.
Távolítsa el az asztalt.
DROP TABLE TruncateTest;