Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Magazyn w usłudze Microsoft Fabric
Baza danych SQL w usłudze Microsoft Fabric
Usuwa wszystkie wiersze z tabeli lub określonych partycji tabeli bez rejestrowania pojedynczych operacji usuwania wierszy.
TRUNCATE TABLE jest podobna do instrukcji DELETE bez klauzuli WHERE; jednak TRUNCATE TABLE jest szybsza i używa mniejszej liczby zasobów dziennika systemu i transakcji.
Transact-SQL konwencje składni
Syntax
Składnia dla programu SQL Server, usługi Azure SQL Database, bazy danych SQL fabric
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>
Składnia usług Microsoft Fabric, Azure Synapse Analytics i Parallel Data Warehouse.
TRUNCATE TABLE { database_name.schema_name.table_name | schema_name.table_name | table_name }
[ ; ]
Arguments
database_name
Nazwa bazy danych.
schema_name
Nazwa schematu, do którego należy tabela.
table_name
Nazwa tabeli do obcinania lub usuwania wszystkich wierszy.
table_name musi być literałem.
table_name nie może być funkcją OBJECT_ID() ani zmienną.
WITH ( PARTITIONS ( { <partition_number_expression> | <range> } [ , ... n ] ) )
Dotyczy: SQL Server 2016 (13.x) i nowszych wersjach.
Określa partycje, które mają zostać obcięte lub z których wszystkie wiersze są usuwane. Jeśli tabela nie jest partycjonowana, argument WITH PARTITIONS generuje błąd. Jeśli nie podano klauzuli WITH PARTITIONS, cała tabela zostanie obcięta.
<partition_number_expression> można określić w następujący sposób:
Podaj liczbę partycji, na przykład:
WITH (PARTITIONS (2))Podaj numery partycji dla kilku pojedynczych partycji rozdzielonych przecinkami, na przykład:
WITH (PARTITIONS (1, 5))Podaj zarówno zakresy, jak i poszczególne partycje, na przykład:
WITH (PARTITIONS (2, 4, 6 TO 8))<range>można określić jako numery partycji oddzielone wyrazemTO, na przykład:WITH (PARTITIONS (6 TO 8))
Aby obcinać tabelę partycjonowaną, należy wyrównać tabelę i indeksy (partycjonowane w tej samej funkcji partycji).
Remarks
W porównaniu z instrukcją DELETETRUNCATE TABLE ma następujące zalety:
Jest używana mniejsza ilość miejsca w dzienniku transakcji.
Instrukcja
DELETEusuwa wiersze pojedynczo i rejestruje wpis w dzienniku transakcji dla każdego usuniętego wiersza.TRUNCATE TABLEUsuwa dane przez cofnięcie przydziału stron danych używanych do przechowywania danych tabeli i indeksu oraz rejestruje tylko przydziały strony w dzienniku transakcji.Zwykle jest używana mniejsza liczba blokad.
Po wykonaniu instrukcji
DELETEprzy użyciu blokady wiersza każdy wiersz w tabeli jest zablokowany do usunięcia.TRUNCATE TABLEzawsze blokuje tabelę (w tym schemat (SCH-M) i stronę, ale nie każdy wiersz.Bez wyjątku strony zerowe pozostają w tabeli lub jej indeksach.
Po wykonaniu instrukcji
DELETEtabela może nadal zawierać puste strony. Na przykład nie można cofnąć przydziału pustych stron w stercie bez co najmniej wyłącznego (LCK_M_X) blokady tabeli. Jeśli operacja usuwania nie używa blokady tabeli, tabela (sterta) może zawierać wiele pustych stron. W przypadku indeksówDELETEinstrukcja może pozostawić puste strony. Następnie proces oczyszczania w tle cofa przydział tych stron.
TRUNCATE TABLE usuwa wszystkie wiersze z tabeli, ale struktura tabeli i jej kolumny, ograniczenia, indeksy itd. pozostają. Aby usunąć definicję tabeli oprócz jej danych, użyj instrukcji DROP TABLE.
Jeśli tabela zawiera kolumnę tożsamości, licznik dla tej kolumny zostanie zresetowany do wartości inicjatora zdefiniowanej dla kolumny. Jeśli nie zdefiniowano inicjatora, zostanie użyta wartość domyślna 1. Aby zachować licznik tożsamości, użyj DELETE zamiast tego.
Operację TRUNCATE TABLE można wycofać w ramach transakcji.
W bazie danych SQL sieci szkieletowej obcinanie tabeli powoduje usunięcie wszystkich zdublowanych danych z usługi Fabric OneLake dla tej tabeli.
Odroczona delokacja
Gdy tabela, która używa co najmniej 128 zakresów, zostanie obcięta, aparat bazy danych wyzywając rzeczywiste przydziały strony i skojarzone z nimi blokady do momentu zatwierdzenia transakcji. Obcięcie odbywa się w dwóch oddzielnych fazach: logicznych i fizycznych. W fazie logicznej istniejące jednostki alokacji używane przez tabelę i jej indeksy są oznaczone do cofnięcia przydziału i zablokowane do momentu zatwierdzenia transakcji. W fazie fizycznej proces w tle usuwa strony oznaczone do cofnięcia przydziału. Oznacza to, że przestrzeń zwolniona przez TRUNCATE TABLE program może nie być natychmiast dostępna dla nowych alokacji.
Jeśli przyspieszone odzyskiwanie bazy danych jest włączone, obcięcie używa oddzielnych faz logicznych i fizycznych niezależnie od liczby zakresów.
Limitations
Nie można używać TRUNCATE TABLE w tabelach, które:
Są przywoływane przez ograniczenie
FOREIGN KEY. Możesz obcinać tabelę z kluczem obcym, który się odwołuje.Weź udział w widoku indeksowanym.
Są publikowane przy użyciu replikacji transakcyjnej lub replikacji scalania.
Są czasowo wersjonowane przez system.
Są przywoływane przez ograniczenie
EDGE.
W przypadku tabel z co najmniej jedną z tych cech należy użyć instrukcji DELETE.
TRUNCATE TABLE nie można aktywować wyzwalacza, ponieważ operacja nie rejestruje pojedynczych usunięć wierszy. Aby uzyskać więcej informacji, zobacz CREATE TRIGGER (Transact-SQL).
W usłudze Azure Synapse Analytics and Analytics Platform System (PDW):
TRUNCATE TABLEnie jest dozwolone w instrukcjiEXPLAIN.TRUNCATE TABLENie można wykonać wewnątrz transakcji.
Permissions
Minimalne wymagane uprawnienia są ALTER w table_name.
TRUNCATE TABLE uprawnienia domyślne dla właściciela tabeli, członków stałej sysadmin roli serwera i db_ownerdb_ddladmin stałych ról bazy danych i nie są przenoszone. Można jednak dołączyć instrukcję TRUNCATE TABLE w module, taką jak procedura składowana, i udzielić odpowiednich uprawnień do modułu przy użyciu klauzuli EXECUTE AS.
Examples
A. Obcinanie tabeli
Poniższy przykład usuwa wszystkie dane z tabeli JobCandidate.
SELECT instrukcje są uwzględniane przed i po instrukcji TRUNCATE TABLE w celu porównania wyników.
USE AdventureWorks2022;
SELECT COUNT(*) AS BeforeTruncateCount
FROM HumanResources.JobCandidate;
TRUNCATE TABLE HumanResources.JobCandidate;
SELECT COUNT(*) AS AfterTruncateCount
FROM HumanResources.JobCandidate;
B. Obcinanie partycji tabeli
Dotyczy: SQL Server 2016 (13.x) i nowszych wersjach.
Poniższy przykład obcina określone partycje tabeli partycjonowanej. Składnia WITH (PARTITIONS (2, 4, 6 TO 8)) powoduje obcięcie liczb partycji 2, 4, 6, 7 i 8.
TRUNCATE TABLE PartitionTable1
WITH (PARTITIONS (2, 4, 6 TO 8));
GO
C. Wycofywanie operacji obcinania
W poniższym przykładzie pokazano, że można wycofać operację TRUNCATE TABLE wewnątrz transakcji.
Utwórz tabelę testową z trzema wierszami.
USE [tempdb]; CREATE TABLE TruncateTest (ID INT IDENTITY (1, 1) NOT NULL); GO INSERT INTO TruncateTest DEFAULT VALUES; GO 3Sprawdź dane przed obcięciem.
SELECT ID FROM TruncateTest;Obcinanie tabeli w ramach transakcji i sprawdzanie liczby wierszy.
BEGIN TRANSACTION; TRUNCATE TABLE TruncateTest; SELECT ID FROM TruncateTest;Zobaczysz, że tabela jest pusta.
Wycofaj transakcję i sprawdź dane.
ROLLBACK TRANSACTION; SELECT ID FROM TruncateTest;Zostaną wyświetlone wszystkie trzy wiersze.
Wyczyść tabelę.
DROP TABLE TruncateTest;