Udostępnij za pośrednictwem


TRUNCATE TABLE (Transact-SQL)

Usuwa wszystkie wiersze z tabela, bez potrzeby logowania usuwanie pojedynczych wierszy.PRZYCINANIE tabela jest podobna do instrukcja DELETE z nie klauzula WHERE; jednak SKRÓCIĆ tabela jest szybsza i wykorzystująca mniejszą ilość zasobów dziennika systemu i transakcji.

Topic link iconKonwencje składni języka Transact-SQL

TRUNCATE TABLE 
    [ { database_name.[ schema_name ]. | schema_name . } ]
    table_name
[ ; ]

Argumenty

  • database_name
    Jest nazwą bazy danych.

  • schema_name
    To nazwa schematu, do której należy tabela.

  • table_name
    Jest to nazwa tabela, która ma zostać obcięta lub z których wszystkie wiersze są usuwane.

Remarks

W porównaniu z instrukcja DELETE OBCINANIA tabela ma następujące zalety:

  • Używany jest mniej miejsca dziennik transakcji.

    Instrukcja DELETE Usuwa wiersze jednej na raz i rejestruje wpis dziennik transakcji dla każdego usuniętego wiersza.PRZYCINANIE tabela usuwa dane przez cofanie przydziału strona danych używane do przechowywania danych tabela i rejestruje tylko deallocations strona dziennik transakcji.

  • Mniejsza liczba blokad są zazwyczaj używane.

    Gdy Instrukcja DELETE jest wykonywane przy użyciu blokada wiersza, każdy wiersz w tabela jest zablokowany do usunięcia.PRZYCINANIE 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 może być dealokowane bez co najmniej taką wyłączności (LCK_M_X) blokada tabela.Jeżeli operacja usuwania nie korzysta z blokada tabela, w tabela (sterty) będzie zawierać liczbę pustych stron.Dla indeksów operacja usuwania można pozostawić puste strony w tle, mimo że strony te będą dealokowane szybko przez proces oczyszczania tła.

PRZYCINANIE tabela usuwa wszystkie wiersze z tabela, ale pozostają strukturę tabela i jej kolumn, ograniczeń, indeksów i tak dalej.Aby usunąć definicji tabela wraz z nim dane, należy użyć instrukcja DROP tabela.

Jeśli tabela zawiera kolumna tożsamości, licznik dla tej kolumny zostanie wyzerowany i nie będzie wartość początkową dla kolumny.Jeśli siewnego nie został zdefiniowany, używana jest wartość domyślna 1.Aby zachować licznika tożsamości, należy użyć DELETE.

Ograniczenia

Nie można używać OBCINANIA tabela z tabel, które:

  • Czy odwołuje się ograniczenie na klucz obcy.(Obciąć tabela zawierającą klucz obcy, która odwołuje się do samej siebie).

  • Udział w widoku indeksowanym.

  • Czy są publikowane za pomocą replikacja transakcyjnej lub scalania replikacja.

W przypadku tabel z jedną lub kilka z tych właściwości należy użyć instrukcja DELETE.

OBCIĄĆ tabela nie można uaktywnić wyzwalacza, ponieważ operacja nie rejestruje usuwanie pojedynczych wierszy.Aby uzyskać więcej informacji zobaczCREATE TRIGGER (języka Transact-SQL).

Obcinanie dużych tabel

Microsoft SQL Server Umożliwia usuwanie lub obcięciu tabele, które mają więcej niż 128 zakresy bez posiadania blokad jednocześnie na wszystkie zakresy wymaganych do listy rozwijanej.Aby uzyskać więcej informacji zobaczDropping and Rebuilding Large Objects.

Uprawnienia

Wymagane co najmniej uprawnienie ALTER znajduje się na table_name. OBCIĄĆ tabela uprawnienia domyślne do właściciela tabela, członkowie sysadmin Rola serwera i db_owner and db_ddladmin stałe role bazy danych i nie są zbywalne.Jednak włączenie instrukcja OBCINANIA tabela w module, takie jak procedura przechowywana i udzielić odpowiednich uprawnień do modułu przy użyciu wykonać AS klauzula.Aby uzyskać więcej informacji zobaczUsing EXECUTE AS to Create Custom Permission Sets.

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 AdventureWorks;
GO
SELECT COUNT(*) AS BeforeTruncateCount 
FROM HumanResources.JobCandidate;
GO
TRUNCATE TABLE HumanResources.JobCandidate;
GO
SELECT COUNT(*) AS AfterTruncateCount 
FROM HumanResources.JobCandidate;
GO