Sentencia TRUNCATE TABLE en SQL
TRUNCATE TABLE
es la sentencia SQL para eliminar todos los registros/filas de una tabla sin afectar al esquema y estructura de la misma. A diferencia de la sentencia DELETE FROM
, TRUNCATE TABLE
no admite cláusula WHERE
, por lo que no se podrán eliminar registros específicos. Sin embargo y en contraposición, TRUNCATE TABLE
no necesita escanear todas las filas antes de eliminarlas, por lo que la ejecución será más rápida y eficiente en el caso que queramos eliminar todos los registros de una tabla manteniendo su estructura.
En este punto, es donde radica su diferencia principal con la sentencia DROP TABLE
, ya que esta, elimina tanto los registros como la estructura y definición de la tabla en sí, mientras que TRUNCATE TABLE
elimina únicamente los registros, pero mantiene intacta la estructura y definición de la tabla.
TRUNCATE TABLE
reseteará los contadores auto incrementales nuevamente al valor por defecto especificado en la sentencia CREATE TABLE
.
La sentencia SQL es muy simple: TRUNCATE TABLE
nombreTabla
pudiendo añadir como prefijo, la base de datos y/o esquema al que pertenece la tabla.
TRUNCATE TABLE tienda.dbo.Pedidos;
TRUNCATE TABLE
no admitirá en la definición de su sentencia el argumento IF EXISTS
. Sin embargo, cuando tenemos tablas particionadas, admitirá el argumento WITH PARTITIONS
donde se especificará que partición en concreto truncar. Atendiendo a este argumento, deberemos tener en cuenta las siguientes consideraciones:
- Cuando nuestra tabla no está particionada e intentamos utilizar el argumento
WITH PARTITIONS
, la sentenciaTRUNCATE TABLE
nos dará un error como en el ejemplo que vemos a continuación.
TRUNCATE TABLE tienda.dbo.Pedidos WITH (PARTITIONS (1));
No se puede especificar un número de partición en la instrucción truncar tabla porque el elemento tabla ‘tienda.dbo.Pedidos’ no está particionado.
- En el caso y supuesto que nuestra tabla estuviera particionada podríamos utilizar el argumento
WITH PARTITIONS
de las siguientes maneras:
- Si queremos eliminar una única partición en específico, podemos concretarla en la definición:
TRUNCATE TABLE nombreTabla WITH (PARTITIONS (2));
- Si queremos eliminar más de una partición, podremos especificarlas desde una única sentencia:
TRUNCATE TABLE nombreTabla WITH (PARTITIONS (1,5));
- También podremos definir un rango para eliminar varias particiones:
TRUNCATE TABLE nombreTabla WITH (PARTITIONS (2 TO 5));
- También es posible especificar varias particiones y un rango desde la misma sentencia:
TRUNCATE TABLE nombreTabla WITH (PARTITIONS (2,3,5 TO 7));
TRUNCATE TABLE
tiene algunas limitaciones que habrá que tener en cuenta y consideración. Ente ellas la más importante y destacada es que no se podrá utilizar dicha sentencia sobre tablas referenciadas por una restricción Foreign Key a otra tabla. Para ejemplificar este caso, supongamos que quisiéramos truncar la tabla Clientes
cuyo campo idClientes
, está definido como una clave Foreign Key en la tabla Pedidos
.
TRUNCATE TABLE Clientes;
No se puede truncar la tabla ‘Clientes’. Una restricción FOREIGN KEY hace referencia a ella.
En conclusión, TRUNCATE TABLE
es una óptima opción cuando queremos resetear todos los datos de una tabla pero sin eliminarla del sistema, debiendola tener en cuenta y priorizarla sobre la alternativa DELETE FROM
, ya que ahorraremos en recursos y agilizaremos la ejecución.