TRUNCATE
genererer ingen rollback-data, hvilket gør det lynhurtigt. Det deallokerer bare de datasider, der bruges af tabellen.
Men hvis du er i en transaktion og vil have muligheden for at "fortryde" denne sletning, skal du bruge DELETE FROM
, som giver mulighed for at rulle tilbage.
EDIT: Bemærk, at ovenstående er forkert for SQL Server (men det gælder for Oracle). I SQL Server er det muligt at rulle tilbage en trunkeringsoperation, hvis du er inde i en transaktion, og transaktionen ikke er blevet begået. Fra et SQL Server-perspektiv er en vigtig forskel mellem DELETE FROM og TRUNCATE dette :"DELETE-sætningen fjerner rækker én ad gangen og registrerer en post i transaktionsloggen for hver slettede række. TRUNCATE TABLE fjerner dataene ved at deallokere de datasider, der bruges til at lagre tabeldataene og registrerer kun sidedeallokeringerne i transaktionsloggen ."
Med andre ord er der mindre logning under en TRUNCATE, fordi kun sidedeallokeringerne registreres i transaktionsloggen, hvorimod med en DELETE FROM hver række slettes. Det er en af grundene til, at TRUNCATE er lynhurtigt.
Bemærk også fra det MSDN-link, at du ikke kan afkorte tabeller, der refereres til af fremmednøglebegrænsninger, deltage i en indekseret visning eller udgives ved hjælp af transaktionsreplikering eller flettereplikering.
EDIT 2: Et andet vigtigt punkt er, at TRUNCATE TABLE vil nulstille din identitet til det oprindelige frø, mens DELETE FROM fortsætter med at stige, hvor det slap. Reference:Ben Robinsons svar.