TRUNCATE
nie generuje żadnych danych cofania, dzięki czemu działa błyskawicznie. Po prostu zwalnia strony danych używane przez tabelę.
Jeśli jednak jesteś w transakcji i chcesz mieć możliwość "cofnięcia" tego usunięcia, musisz użyć DELETE FROM
, co daje możliwość wycofania.
EDYTUJ: Zauważ, że powyższe jest niepoprawne dla SQL Server (ale dotyczy Oracle). W SQL Server możliwe jest wycofanie operacji obcinania, jeśli znajdujesz się w transakcji, a transakcja nie została zatwierdzona. Z perspektywy programu SQL Server jedną kluczową różnicą między DELETE FROM a TRUNCATE jest this :"Instrukcja DELETE usuwa wiersze pojedynczo i zapisuje wpis w dzienniku transakcji dla każdego usuniętego wiersza. TRUNCATE TABLE usuwa dane przez cofnięcie alokacji stron danych używanych do przechowywania danych tabeli i rejestruje tylko cofnięcia alokacji stron w dzienniku transakcji ”.
Innymi słowy, podczas operacji TRUNCATE jest mniej rejestrowania, ponieważ w dzienniku transakcji są rejestrowane tylko cofnięcia alokacji stron, podczas gdy w przypadku polecenia DELETE FROM rejestrowane jest usuwanie każdego wiersza. To jeden z powodów, dla których TRUNCATE działa błyskawicznie.
Zauważ również, że z tego łącza MSDN nie można obcinać tabel, do których odwołują się ograniczenia klucza obcego, uczestniczyć w widoku indeksowanym lub publikowanych przy użyciu replikacji transakcyjnej lub replikacji scalającej.
EDYCJA 2: Innym kluczowym punktem jest to, że TRUNCATE TABLE zresetuje twoją tożsamość do początkowego ziarna, podczas gdy DELETE FROM będzie kontynuowało inkrementację od miejsca, w którym zostało przerwane. Odniesienie:odpowiedź Bena Robinsona.