Usunięcie wszystkich wierszy przy użyciu tabeli TRUNCATE
Instrukcja OBCIĄĆ tabela jest szybkie, skuteczne metoda usuwania wszystkich wierszy w tabela.Tabela OBCIĄĆ jest podobna do instrukcja DELETE bez klauzula WHERE.OBCIĄĆ tabelę jest szybsza i wykorzystuje mniej zasobów dziennik systemu i transakcji.
W porównaniu do instrukcja DELETE OBCIĄĆ tabelę ma następujące zalety:
Używany jest mniej miejsca w dzienniku transakcji.
Instrukcja DELETE Usuwa wiersze jednej na czas i rejestruje wpis w dzienniku transakcji dla każdego usuniętego wiersza.OBCIĄĆ tabela usuwa dane przez cofanie przydziału stron danych używana do przechowywania danych tabela i rejestruje tylko deallocations strona w dzienniku transakcji.
Zazwyczaj używane są mniej blokad.
Gdy Instrukcja DELETE jest wykonywane przy użyciu blokada wiersza, każdy wiersz w tabela jest zablokowany do usunięcia.OBCIĄĆ tabela blokuje zawsze tabela i strona, ale nie każdy wiersz.
Bez wyjątku zero strony są pozostawiane w tabela.
Po wykonaniu instrukcja DELETE tabela może nadal zawierać puste strony.Na przykład, pustych stron w sterty nie przydzielenia bez wyłączności, co najmniej (LCK_M_X) blokada tabela.Jeżeli operacja usuwania nie korzysta z blokada tabeli, tabela (sterty) będzie zawierać wiele pustych stron.Dla indeksów operacja usuwania można pozostawić puste strony za, chociaż te strony zostaną szybko przydzielenia przez proces oczyszczania tła.
Jak z usuwanie definicji tabela opróżniona za pomocą OBCIĄĆ tabela pozostaje w bazie danych, wraz z jej indeksów i inne skojarzone obiekty.Jeśli tabela zawiera kolumna tożsamości, licznik dla tej kolumna jest resetowany do wartości materiału siewnego zdefiniowanej 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.
Obcinanie dużych tabel
Microsoft SQL Server introduced the ability to drop or truncate tables that have more than 128 extents without holding simultaneous locks on all the extents required for the drop.Aby uzyskać więcej informacji, zobacz Upuszczanie i odbudowując dużych obiektów.
Przykłady
The following example removes all data from the JobCandidate table.SELECT statements are included before and after the TRUNCATE TABLE statement to compare results.
USE AdventureWorks2008R2;
GO
SELECT COUNT(*) AS BeforeTruncateCount
FROM HumanResources.JobCandidate;
GO
TRUNCATE TABLE HumanResources.JobCandidate;
GO
SELECT COUNT(*) AS AfterTruncateCount
FROM HumanResources.JobCandidate;
GO