Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:SQL Server
Azure SQL Database
Spravovaná instance
Azure SQLAzure Synapse Analytics
PdW (Analytics Platform System)
Sklad v Microsoft Fabric
Databáze SQL v Microsoft Fabric
Odebere všechny řádky z tabulky nebo zadané oddíly tabulky bez protokolování odstranění jednotlivých řádků.
TRUNCATE TABLE se podobá příkazu DELETE bez klauzule WHERE; ale TRUNCATE TABLE je rychlejší a používá méně systémových a transakčních protokolů prostředků.
Syntax
Syntaxe pro SQL Server, Azure SQL Database, Databázi Fabric SQL
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>
Syntaxe pro Microsoft Fabric, Azure Synapse Analytics a Paralelní datový sklad
TRUNCATE TABLE { database_name.schema_name.table_name | schema_name.table_name | table_name }
[ ; ]
Arguments
database_name
Název databáze.
schema_name
Název schématu, do kterého tabulka patří.
table_name
Název tabulky, která se má zkrátit nebo ze které se odeberou všechny řádky.
table_name musí být literál.
table_name nemůže být funkce OBJECT_ID() ani proměnná.
WITH ( PARTITIONS ( { <partition_number_expression> | <rozsah> } [ , ... n ] ) )
platí pro: SQL Server 2016 (13.x) a novější verze.
Určuje oddíly, které se mají zkrátit nebo ze kterých se odeberou všechny řádky. Pokud tabulka není rozdělená na oddíly, WITH PARTITIONS argument vygeneruje chybu. Pokud není zadanou klauzulí WITH PARTITIONS, zkrátí se celá tabulka.
<partition_number_expression> lze zadat následujícími způsoby:
Zadejte počet oddílů, například:
WITH (PARTITIONS (2))Zadejte čísla oddílů pro několik jednotlivých oddílů oddělených čárkami, například:
WITH (PARTITIONS (1, 5))Zadejte rozsahy i jednotlivé oddíly, například:
WITH (PARTITIONS (2, 4, 6 TO 8))<range>lze zadat jako čísla oddílů oddělená slovemTO, například:WITH (PARTITIONS (6 TO 8))
Pokud chcete zkrátit dělenou tabulku, musí být tabulky a indexy zarovnané (dělené podle stejné funkce oddílu).
Remarks
V porovnání s příkazem DELETE má TRUNCATE TABLE následující výhody:
Použije se méně místa transakčního protokolu.
Příkaz
DELETEodebere řádky po jednom a zaznamená položku v transakčním protokolu pro každý odstraněný řádek.TRUNCATE TABLEodebere data uvolněním datových stránek použitých k ukládání dat tabulky a indexu a zaznamenává pouze přidělení stránek v transakčním protokolu.Obvykle se používá méně zámků.
Když se příkaz
DELETEspustí pomocí zámku řádku, je každý řádek v tabulce uzamčen pro odstranění.TRUNCATE TABLEvždy uzamkne tabulku (včetně zámku schématu (SCH-M) a stránku, ale ne každý řádek.Bez výjimky zůstanou nulové stránky v tabulce nebo jeho indexech.
Po provedení příkazu
DELETEmůže tabulka stále obsahovat prázdné stránky. Například prázdné stránky v haldě nelze uvolnit bez alespoň výhradního zámku tabulky (LCK_M_X). Pokud operace odstranění nepoužívá zámek tabulky, může tabulka (halda) obsahovat mnoho prázdných stránek. U indexů může příkazDELETEnechat prázdné stránky za sebou. Proces čištění na pozadí pak tyto stránky uvolní.
TRUNCATE TABLE odebere všechny řádky z tabulky, ale struktura tabulky a její sloupce, omezení, indexy atd., zůstanou. Pokud chcete kromě dat odebrat definici tabulky, použijte příkaz DROP TABLE.
Pokud tabulka obsahuje sloupec identity, je čítač pro tento sloupec resetován na počáteční hodnotu definovanou pro sloupec. Pokud nebyla definována žádná počáteční hodnota, použije se výchozí hodnota, 1. Pokud chcete zachovat čítač identity, použijte místo toho DELETE.
Operaci TRUNCATE TABLE lze vrátit zpět v rámci transakce.
Ve službě Fabric SQL Database se zkrácením tabulky odstraní všechna zrcadlená data z Fabric OneLake pro danou tabulku.
Odložené oddělování
Když se zkrátí tabulka, která používá 128 rozsahů nebo více, databázový stroj odvrací skutečné přidělení stránky a jejich přidružené zámky, dokud se transakce potvrzení. Zkrácení probíhá ve dvou samostatných fázích: logické a fyzické. V logické fázi jsou existující alokační jednotky používané tabulkou a jeho indexy označeny k uvolnění a uzamčení, dokud transakce potvrzení. Ve fyzické fázi proces na pozadí odebere stránky označené k uvolnění. To znamená, že prostor uvolněný TRUNCATE TABLE nemusí být k dispozici pro nové přidělení okamžitě.
Pokud je povolené zrychlené obnovení databáze , zkrácení používá samostatné logické a fyzické fáze bez ohledu na počet rozsahů.
Limitations
Nemůžete použít TRUNCATE TABLE u tabulek, které:
Odkazuje se na omezení
FOREIGN KEY. Můžete zkrátit tabulku, která obsahuje cizí klíč, který odkazuje sám na sebe.Zapojte se do indexovaného zobrazení.
Publikují se pomocí transakční replikace nebo slučovací replikace.
Jsou časové verze systému.
Odkazuje se na omezení
EDGE.
Pro tabulky s jednou nebo více z těchto charakteristik použijte místo toho příkaz DELETE.
TRUNCATE TABLE aktivační událost nejde aktivovat, protože operace nezapíše odstranění jednotlivých řádků. Další informace naleznete v tématu CREATE TRIGGER (Transact-SQL).
Ve službě Azure Synapse Analytics a Platform Platform System (PDW):
TRUNCATE TABLEnení v příkazuEXPLAINpovolený.TRUNCATE TABLEnelze provést uvnitř transakce.
Permissions
Minimální požadovaná oprávnění se ALTER na table_name.
TRUNCATE TABLE oprávnění výchozí pro vlastníka tabulky, členy sysadmin pevné role serveru a db_owner pevné databázové role a db_ddladmin nelze je přenášet. Příkaz TRUNCATE TABLE však můžete začlenit do modulu, například uloženou proceduru, a udělit modulu příslušná oprávnění pomocí klauzule EXECUTE AS.
Examples
A. Zkrácení tabulky
Následující příklad odebere všechna data z tabulky JobCandidate.
SELECT příkazy jsou zahrnuty před a za příkazem TRUNCATE TABLE pro porovnání výsledků.
USE AdventureWorks2022;
SELECT COUNT(*) AS BeforeTruncateCount
FROM HumanResources.JobCandidate;
TRUNCATE TABLE HumanResources.JobCandidate;
SELECT COUNT(*) AS AfterTruncateCount
FROM HumanResources.JobCandidate;
B. Zkrácení oddílů tabulky
platí pro: SQL Server 2016 (13.x) a novější verze.
Následující příklad zkrátí zadané oddíly dělené tabulky. Syntaxe WITH (PARTITIONS (2, 4, 6 TO 8)) způsobí zkrácení čísel oddílů 2, 4, 6, 7 a 8.
TRUNCATE TABLE PartitionTable1
WITH (PARTITIONS (2, 4, 6 TO 8));
GO
C. Vrácení operace zkrácení zpět
Následující příklad ukazuje, že operace TRUNCATE TABLE uvnitř transakce lze vrátit zpět.
Vytvořte testovací tabulku se třemi řádky.
USE [tempdb]; CREATE TABLE TruncateTest (ID INT IDENTITY (1, 1) NOT NULL); GO INSERT INTO TruncateTest DEFAULT VALUES; GO 3Před zkrácením zkontrolujte data.
SELECT ID FROM TruncateTest;Zkrátte tabulku v rámci transakce a zkontrolujte počet řádků.
BEGIN TRANSACTION; TRUNCATE TABLE TruncateTest; SELECT ID FROM TruncateTest;Vidíte, že tabulka je prázdná.
Vrácení transakce zpět a kontrola dat.
ROLLBACK TRANSACTION; SELECT ID FROM TruncateTest;Zobrazí se všechny tři řádky.
Vyčistěte tabulku.
DROP TABLE TruncateTest;
Související obsah
- DELETE (Transact-SQL)
-
DROP TABLE (Transact-SQL) -
CREATE TABLE (Transact-SQL) IDENTITY (vlastnost)