sql >> Base de Datos >  >> RDS >> Sqlserver

¿Cómo truncas todas las tablas en una base de datos usando TSQL?

Cuando se trata de eliminar datos de tablas que tienen relaciones de clave externa, que es básicamente el caso de cualquier base de datos diseñada correctamente, podemos deshabilitar todas las restricciones, eliminar todos los datos y luego volver a habilitar las restricciones

-- disable all constraints
EXEC sp_MSForEachTable "ALTER TABLE ? NOCHECK CONSTRAINT all"

-- delete data in all tables
EXEC sp_MSForEachTable "DELETE FROM ?"

-- enable all constraints
exec sp_MSForEachTable "ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all"

Más información sobre la desactivación de restricciones y activadores aquí

si algunas de las tablas tienen columnas de identidad, es posible que deseemos volver a generarlas

EXEC sp_MSForEachTable "DBCC CHECKIDENT ( '?', RESEED, 0)"

Tenga en cuenta que el comportamiento de RESEED difiere entre una tabla nueva y una que tenía algunos datos insertados previamente desde BOL:

DBCC CHECKIDENT ('table_name', RESEED, newReseedValue)

El valor de identidad actual se establece en el nuevo valor de reinicio. Si no se han insertado filas en la tabla desde que se creó, la primera fila insertada después de ejecutar DBCC CHECKIDENT usará newReseedValue como identidad. De lo contrario, la siguiente fila insertada usará newReseedValue + 1. Si el valor de newReseedValue es menor que el valor máximo en la columna de identidad, se generará el mensaje de error 2627 en referencias posteriores a la tabla.

Gracias a Robert por señalar el hecho de que deshabilitar las restricciones no permite usar truncar, las restricciones deberían eliminarse y luego volver a crearse