TRUNCATE
no genera ningún dato de reversión, lo que hace que sea muy rápido. Simplemente desasigna las páginas de datos utilizadas por la tabla.
Sin embargo, si se encuentra en una transacción y desea la posibilidad de "deshacer" esta eliminación, debe usar DELETE FROM
, que le permite deshacerse.
EDIT: Tenga en cuenta que lo anterior es incorrecto para SQL Server (pero se aplica a Oracle). En SQL Server, es posible deshacer una operación truncada si se encuentra dentro de una transacción y la transacción no se ha confirmado. Desde la perspectiva de SQL Server, una diferencia clave entre DELETE FROM y TRUNCATE es this: "La instrucción DELETE elimina las filas de una en una y registra una entrada en el registro de transacciones para cada fila eliminada. TRUNCATE TABLE elimina los datos desasignando los datos páginas utilizadas para almacenar los datos de la tabla y registra solo las desasignaciones de la página en el registro de transacciones ".
En otras palabras, hay menos registro durante un TRUNCATE porque solo las desasignaciones de página se registran en el registro de transacciones, mientras que con un BORRAR DE cada fila se graba el borrado. Esa es una de las razones por las que TRUNCATE es muy rápido.
Tenga en cuenta también desde ese enlace de MSDN que no puede truncar tablas a las que se hace referencia mediante restricciones de clave externa, participar en una vista indizada o publicar mediante la replicación transaccional o la duplicación de mezcla.
EDIT 2: Otro punto clave es que TRUNCATE TABLE se restablecerá su identidad a la semilla inicial, mientras que se CANCELACIÓN de continuar incrementando desde donde lo dejó. Referencia: respuesta de Ben Robinson.
'TRUNCATE' también puede romper consistencia (= no comprueba las claves externas, y no se dispara disparadores) – nothrow
@Yossarian - Según MSDN: "No puede usar TRUNCATE TABLE en una tabla a la que hace referencia una restricción FOREIGN KEY; en su lugar, use la instrucción DELETE sin una cláusula WHERE ". http://msdn.microsoft.com/en-us/library/aa260621%28SQL.80%29.aspx – dcp
truncar también se puede retrotraer. http: // sqlblog.com/blogs/denis_gobo/archive/2007/06/13/1458.aspx – Dhananjay