TRUNCATE
non genera alcun dato di ripristino, il che lo rende velocissimo. Semplicemente rilascia le pagine di dati usate dalla tabella.
Tuttavia, se si è in una transazione e si desidera la possibilità di "annullare" questa eliminazione, è necessario utilizzare DELETE FROM
, che consente di eseguire il rollback.
MODIFICA: Si noti che quanto sopra non è corretto per SQL Server (ma vale per Oracle). In SQL Server, è possibile eseguire il rollback di un'operazione troncata se ci si trova all'interno di una transazione e la transazione non è stata eseguita. Da una prospettiva di SQL Server, una differenza chiave tra DELETE FROM e TRUNCATE è this: "L'istruzione DELETE rimuove le righe una alla volta e registra una voce nel log delle transazioni per ciascuna riga eliminata. TRUNCATE TABLE rimuove i dati deallanciando i dati pagine utilizzate per memorizzare i dati della tabella e registra solo le deallocazioni della pagina nel log delle transazioni. "
In altre parole, durante il TRUNCATE è presente un numero inferiore di registrazioni poiché solo le deallocazioni di pagina vengono registrate nel registro delle transazioni, mentre con DELETE FROM ogni riga viene registrata l'eliminazione. Questo è uno dei motivi per cui TRUNCATE è fulmineo.
Nota anche da quel collegamento MSDN che non è possibile troncare le tabelle a cui fanno riferimento i vincoli di chiave esterna, partecipare a una vista indicizzata o vengono pubblicati utilizzando la replica transazionale o la replica di tipo merge.
EDIT 2: Un altro punto chiave è che TRUNCATE TABLE ripristinerà la vostra identità al seme iniziale, mentre DELETE FROM porterà avanti incremento dal punto in cui era stato interrotto. Riferimento: risposta di Ben Robinson.
'TRUNCATE' può anche rompere consistenza (= non verificare la presenza di chiavi esterne, e non sparare trigger) – nothrow
@Yossarian - Secondo MSDN: "Non è possibile utilizzare TRUNCATE TABLE su una tabella a cui fa riferimento un vincolo FOREIGN KEY; invece, utilizzare l'istruzione DELETE senza una clausola WHERE ". http://msdn.microsoft.com/en-us/library/aa260621%28SQL.80%29.aspx – dcp
truncate può essere eseguito il rollback di alos. http: // sqlblog.it/blogs/denis_gobo/archive/2007/06/13/1458.aspx – Dhananjay