Servidor SQL: sentencia TRUNCATE TABLE

Los datos expuestos en este blog, son solo de índole informativo. Por favor realiza siempre una copia de seguridad antes de realizar cualquier cambio en tu proyecto.

Servidor SQL: sentencia TRUNCATE TABLE

Este tutorial de SQL Server describe cómo usar sentencia TRUNCATE TABLE Sintaxis y ejemplos en SQL Server (Transact-SQL).

describir

La declaración TRUNCATE TABLE se usa para eliminar todos los registros de una tabla en SQL Server. Realiza la misma función que la instrucción DELETE sin la cláusula WHERE.

sintaxis

La sintaxis de la instrucción TRUNCATE TABLE en SQL Server (Transact-SQL) es:

TRUNCATE TABLE [database_name.] [schema_name.] table_name
[ WITH ( PARTITIONS ( partition_number
                    | partition_number TO partition_number ) ] ;

parámetro o parámetro

nombre_base_datos Opcional. Si se especifica, es el nombre de la base de datos. schema_name es opcional. Si se especifica, es el nombre del esquema al que pertenece la tabla. table_name La tabla a truncar. WITH ( PARTITIONS ( número_partición | número_partición TO número_partición ) es opcional y solo se puede usar con tablas particionadas. Si se especifica, número_partición es el número de partición que desea truncar en la tabla particionada. Para enumerar varias particiones, separe los números de partición con comas Valor o rango. Si intenta utilizar esta cláusula con una tabla sin particiones, SQL Server devolverá un error. Esta característica no está disponible en todas las ediciones de SQL Server.

notas

  • Si trunca la tabla, se restablecerán los contadores de cualquier columna de identidad.
  • No puede truncar tablas referenciadas por claves foráneas.
  • Debe tener los privilegios necesarios, como ALTER TABLE, antes de truncar la tabla.

ejemplo

En SQL Server, truncar una tabla es una forma rápida de borrar registros de una tabla si no necesita preocuparse por las reversiones. Cuando se trunca una tabla, las eliminaciones de filas no se registran, por lo que no es posible revertir sin una transacción (nota: el truncamiento se puede revertir si incluye un truncamiento en una transacción, consulte las preguntas frecuentes a continuación). También es mucho más fácil truncar una tabla que soltarla y volver a crearla.

Veamos un ejemplo de cómo usar la instrucción TRUNCATE TABLE en SQL Server.

Por ejemplo:

TRUNCATE TABLE employees;

Este ejemplo trunca la tabla llamada empleados y elimina todos los registros de esa tabla.

Es equivalente a la siguiente instrucción DELETE en SQL Server:

DELETE FROM employees;

Ambas declaraciones harán que se eliminen todos los datos de la tabla de empleados. La principal diferencia entre los dos es que la declaración DELETE se puede revertir si se selecciona, pero la declaración TRUNCATE TABLE no se puede revertir.

Veamos otro ejemplo donde prefijamos el nombre de la tabla con el nombre de la base de datos.

Por ejemplo:

TRUNCATE TABLE totn.contacts;

Este ejemplo trunca una tabla llamada contactos en una base de datos llamada totn.

con mampara

Si desea truncar una partición específica o un rango de particiones, puede usar la cláusula WITH PARTITIONS.

Por ejemplo:

TRUNCATE TABLE employees
WITH (PARTITIONS (1 TO 5, 7));

En este ejemplo, la tabla de empleados es una tabla particionada y la instrucción TRUNCATE TABLE truncará las particiones 1 a 5 y la partición 7 de la tabla particionada.

Preguntas frecuentes

Pregunta: ¿Puede revertir una instrucción TRUNCATE TABLE en SQL Server?

Respuesta: una instrucción TRUNCATE TABLE se puede revertir en SQL Server mediante transacciones.

Por ejemplo:

CREATE TABLE test_table (column1 int);

INSERT INTO test_table VALUES (1);
INSERT INTO test_table VALUES (2);
INSERT INTO test_table VALUES (3);

-- Create a transaction
BEGIN TRAN;

-- Truncate table
TRUNCATE TABLE dbo.test_table;

-- Rollback truncate table
ROLLBACK;

SELECT * FROM test_table;

La instrucción SELECT anterior debe devolver los siguientes registros:

column1
----------
1
2
3     

Como puede ver, la declaración TRUNCATE TABLE se revirtió con éxito y los 3 registros aún están en test_table.