TRUNCATE TABLE (Transact-SQL)
Usuwa wszystkie wiersze z tabela bez rejestrowania usunięcia pojedynczego wiersza.OBCIĄĆ tabelę jest podobna do instrukcja DELETE z nie klauzula; OBCIĄĆ tabelę jest szybsza i wykorzystująca mniejszą ilość zasobów dziennika systemu i transakcji.
Składnia
TRUNCATE TABLE
[ { database_name .[ schema_name ] . | schema_name . } ]
table_name
[ ; ]
Argumenty
database_name
Jest to nazwa bazy danych.schema_name
Jest to nazwa schematu, do której należy tabela .table_name
Jest nazwą tabela , aby skrócić lub z którego usunięto wszystkie wiersze.
Uwagi
W porównaniu do instrukcjaDELETE OBCIĄĆ tabelę ma następujące zalety:
Używany jest mniej miejsca w dzienniku transakcji.
instrukcja DELETE Usuwa wiersze jednej w czas i rejestruje wpis w dzienniku transakcji dla każdego usuniętego wiersza.OBCIĄĆ tabelę usuwa dane cofanie przydziału strony danych używane do przechowywania danych tabela i rekordy tylko deallocations strona w dzienniku transakcji.
Mniejsza liczba blokad są zazwyczaj używane.
Gdy instrukcja DELETE jest wykonywane przy użyciu wiersza blokada, każdy wiersz w tabela jest zablokowany do usunięcia.OBCIĄĆ tabelę blokuje zawsze tabela i strona , ale nie w każdym wierszu.
Bez wyjątku zero strony są pozostawiane w tabela.
Po wykonaniu instrukcja DELETE tabela może nadal zawierać puste strony.Na przykład puste strony sterty nie dealokowane bez co najmniej (LCK_M_X) tabelawyłącznościblokada. Operacja usuwania nie używa tabela blokada, tabela (sterty) będzie zawierał wiele pustych stron.Dla indeksów operacja usuwania można pozostawić puste strony za, chociaż te strony zostaną szybko dealokowane przez proces oczyszczania tła.
OBCIĄĆ tabelę Usuwa wszystkie wiersze z tabela, ale strukturę tabela i jej kolumn, pozostają bez ograniczeń, indeksów i tak dalej.Aby usunąć definicji tabela oprócz jej danych, użyj instrukcjaDROP TABLE.
Jeśli tabela zawiera kolumnatożsamooci, licznik dla tej kolumna jest resetowany do wartości materiału siewnego określone dla kolumna.Jeśli nie zdefiniowano żadnych nasion, używana jest wartość domyślna 1.Aby zachować licznika tożsamości, należy użyć DELETE.
Ograniczenia
Nie można używać OBCIĄĆ tabelę na tabele, które:
Odwołuje się ograniczenie na klucz OBCY.(Obciąć tabela , która ma klucz obcy , który odwołuje się do siebie).
Uczestniczyć w indeksowany widok.
Są publikowane za pomocą replikacja transakcyjnej lub replikacja scalająca.
Dla tabel z jedną lub więcej z tych cech należy użyć instrukcja DELETE.
OBCIĄĆ tabeli nie można uaktywnić wyzwalacza, ponieważ operacja nie rejestruje usunięcia pojedynczego wiersza.Aby uzyskać więcej informacji, zobacz CREATE TRIGGER (Transact-SQL).
Obcinanie dużych tabel
Microsoft SQL Serverma zdolność do spadku lub obcięciu tabele, które mają więcej niż 128 zakresy bez blokują jednocześnie wszystkie zakresy wymaganych dla listy rozwijanej.Aby uzyskać więcej informacji, zobacz Upuszczanie i odbudowując dużych obiektów.
Uprawnienia
Minimalne wymagane uprawnienie jest ALTER na table_name.OBCIĄĆ tabelę uprawnień domyślnych do właściciela tabela członków sysadmin stała rola serwerai db_owner i db_ddladmin ról stałej bazy danych i są nie zbywalnych.Jednak włączenie OBCIĄĆ tabelę instrukcja w module, takie jak procedura składowanai udzielić odpowiednich uprawnień do modułu na podstawie EXECUTE jako klauzula.Aby uzyskać więcej informacji, zobacz Aby utworzyć niestandardowe zestawy uprawnień przy użyciu jako wykonywanie.
Przykłady
W następującym przykładzie usunięto wszystkie dane z JobCandidate tabela.SELECTsprawozdania są uwzględniane przed i po TRUNCATE TABLE instrukcja do porównywania wyniki.
USE AdventureWorks2008R2;
GO
SELECT COUNT(*) AS BeforeTruncateCount
FROM HumanResources.JobCandidate;
GO
TRUNCATE TABLE HumanResources.JobCandidate;
GO
SELECT COUNT(*) AS AfterTruncateCount
FROM HumanResources.JobCandidate;
GO