¿Cómo puedo eliminar todos los registros de todas las tablas de mi base de datos? ¿Puedo hacerlo con un comando SQL o necesito un comando SQL por cada tabla?Eliminar todos los datos en la base de datos SQL Server
Respuesta
La solución de SQLMenace funcionó para mí con un ligero ajuste de cómo se borran los datos - DELETE FROM
en lugar de TRUNCATE
.
-- disable referential integrity
EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
GO
EXEC sp_MSForEachTable 'DELETE FROM ?'
GO
-- enable referential integrity again
EXEC sp_MSForEachTable 'ALTER TABLE ? WITH CHECK CHECK CONSTRAINT ALL'
GO
Por lo general sólo se utilizan el sp_MSForEachTable indocumentado proc
-- disable referential integrity
EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
GO
EXEC sp_MSForEachTable 'TRUNCATE TABLE ?'
GO
-- enable referential integrity again
EXEC sp_MSForEachTable 'ALTER TABLE ? CHECK CONSTRAINT ALL'
GO
Ver también: Delete all data in database (when you have FKs)
No creo que esto funcione. Parece que Kalen Delaney fue inadvertidamente responsable de comenzar esta idea. [Aquí lo aclara] (http://www.eggheadcafe.com/software/aspnet/29927698/cant-truncate-table.aspx) "debe eliminar la restricción de referencia para truncar la tabla". –
Martin Lo acabo de ejecutar hace 2 segundos en Adventureworks DB sin ningún problema – SQLMenace
Definitivamente no funciona para mí aquí. 'crear pruebas de base de datos; IR prueba de uso; crear tabla t1 (i int clave primaria) crear tabla t2 (i int clave principal, p int referencias t1) ' –
Por lo general, es mucho más rápido que la escritura a cabo todos los objetos en la base de datos, y crear un vacío, que para eliminar o truncar tablas
/* Drop all non-system stored procs */
DECLARE @name VARCHAR(128)
DECLARE @SQL VARCHAR(254)
SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] = 'P' AND category = 0 ORDER BY [name])
WHILE @name is not null
BEGIN
SELECT @SQL = 'DROP PROCEDURE [dbo].[' + RTRIM(@name) +']'
EXEC (@SQL)
PRINT 'Dropped Procedure: ' + @name
SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] = 'P' AND category = 0 AND [name] > @name ORDER BY [name])
END
GO
/* Drop all views */
DECLARE @name VARCHAR(128)
DECLARE @SQL VARCHAR(254)
SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] = 'V' AND category = 0 ORDER BY [name])
WHILE @name IS NOT NULL
BEGIN
SELECT @SQL = 'DROP VIEW [dbo].[' + RTRIM(@name) +']'
EXEC (@SQL)
PRINT 'Dropped View: ' + @name
SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] = 'V' AND category = 0 AND [name] > @name ORDER BY [name])
END
GO
/* Drop all functions */
DECLARE @name VARCHAR(128)
DECLARE @SQL VARCHAR(254)
SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] IN (N'FN', N'IF', N'TF', N'FS', N'FT') AND category = 0 ORDER BY [name])
WHILE @name IS NOT NULL
BEGIN
SELECT @SQL = 'DROP FUNCTION [dbo].[' + RTRIM(@name) +']'
EXEC (@SQL)
PRINT 'Dropped Function: ' + @name
SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] IN (N'FN', N'IF', N'TF', N'FS', N'FT') AND category = 0 AND [name] > @name ORDER BY [name])
END
GO
/* Drop all Foreign Key constraints */
DECLARE @name VARCHAR(128)
DECLARE @constraint VARCHAR(254)
DECLARE @SQL VARCHAR(254)
SELECT @name = (SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'FOREIGN KEY' ORDER BY TABLE_NAME)
WHILE @name is not null
BEGIN
SELECT @constraint = (SELECT TOP 1 CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'FOREIGN KEY' AND TABLE_NAME = @name ORDER BY CONSTRAINT_NAME)
WHILE @constraint IS NOT NULL
BEGIN
SELECT @SQL = 'ALTER TABLE [dbo].[' + RTRIM(@name) +'] DROP CONSTRAINT [' + RTRIM(@constraint) +']'
EXEC (@SQL)
PRINT 'Dropped FK Constraint: ' + @constraint + ' on ' + @name
SELECT @constraint = (SELECT TOP 1 CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'FOREIGN KEY' AND CONSTRAINT_NAME <> @constraint AND TABLE_NAME = @name ORDER BY CONSTRAINT_NAME)
END
SELECT @name = (SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'FOREIGN KEY' ORDER BY TABLE_NAME)
END
GO
/* Drop all Primary Key constraints */
DECLARE @name VARCHAR(128)
DECLARE @constraint VARCHAR(254)
DECLARE @SQL VARCHAR(254)
SELECT @name = (SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'PRIMARY KEY' ORDER BY TABLE_NAME)
WHILE @name IS NOT NULL
BEGIN
SELECT @constraint = (SELECT TOP 1 CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'PRIMARY KEY' AND TABLE_NAME = @name ORDER BY CONSTRAINT_NAME)
WHILE @constraint is not null
BEGIN
SELECT @SQL = 'ALTER TABLE [dbo].[' + RTRIM(@name) +'] DROP CONSTRAINT [' + RTRIM(@constraint)+']'
EXEC (@SQL)
PRINT 'Dropped PK Constraint: ' + @constraint + ' on ' + @name
SELECT @constraint = (SELECT TOP 1 CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'PRIMARY KEY' AND CONSTRAINT_NAME <> @constraint AND TABLE_NAME = @name ORDER BY CONSTRAINT_NAME)
END
SELECT @name = (SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'PRIMARY KEY' ORDER BY TABLE_NAME)
END
GO
/* Drop all tables */
DECLARE @name VARCHAR(128)
DECLARE @SQL VARCHAR(254)
SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] = 'U' AND category = 0 ORDER BY [name])
WHILE @name IS NOT NULL
BEGIN
SELECT @SQL = 'DROP TABLE [dbo].[' + RTRIM(@name) +']'
EXEC (@SQL)
PRINT 'Dropped Table: ' + @name
SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] = 'U' AND category = 0 AND [name] > @name ORDER BY [name])
END
GO
esto realmente funcionó para mí –
Soy consciente de que es tarde, pero estoy de acuerdo con la sugerencia de AlexKuznetsov a la escritura de la base de datos, en lugar de pasar por la molestia de purgar los datos de las tablas. Si la solución TRUNCATE
no funciona, y tiene una gran cantidad de datos, emitir (registrar) DELETE
puede llevar mucho tiempo y se le dejarán identificadores que no se han vuelto a sembrar (es decir, una declaración INSERT
en una tabla con una columna IDENTITY
obtendría una ID de 50000 en lugar de una ID de 1).
Para la escritura de una base de datos completa, en SSMS, haga clic en la base de datos, a continuación, seleccione TASKS
->Generate scripts
:
Haga clic Next
para omitir la pantalla de bienvenida Asistente para, a continuación, seleccione el que los objetos querer guión:
En la pantalla Set scripting options
, usted puede escoger la configuración de las secuencias de comandos, como si para generar 1 guión de todos los objetos, o secuencias de comandos separados para los objetos individuales, y si hay que guardar el archivo en Unicode o ANSI:
El asistente mostrará un resumen, que se puede utilizar para verificar que todo sea como se desee, y cerrar haciendo clic en 'Finalizar'.
A continuación una secuencia de comandos que utiliza para eliminar todos los datos de una base de datos SQL Server
------------------------------------------------------------
/* Use database */
-------------------------------------------------------------
use somedatabase;
GO
------------------------------------------------------------------
/* Script to delete an repopulate the base [init database] */
------------------------------------------------------------------
-------------------------------------------------------------
/* Procedure delete all constraints */
-------------------------------------------------------------
IF EXISTS (SELECT name
FROM sysobjects
WHERE name = 'sp_DeleteAllConstraints' AND type = 'P')
DROP PROCEDURE dbo.sp_DeleteAllConstraints
GO
CREATE PROCEDURE sp_DeleteAllConstraints
AS
EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
EXEC sp_MSForEachTable 'ALTER TABLE ? DISABLE TRIGGER ALL'
GO
-----------------------------------------------------
/* Procedure delete all data from the database */
-----------------------------------------------------
IF EXISTS (SELECT name
FROM sysobjects
WHERE name = 'sp_DeleteAllData' AND type = 'P')
DROP PROCEDURE dbo.sp_DeleteAllData
GO
CREATE PROCEDURE sp_DeleteAllData
AS
EXEC sp_MSForEachTable 'DELETE FROM ?'
GO
-----------------------------------------------
/* Procedure enable all constraints */
-----------------------------------------------
IF EXISTS (SELECT name
FROM sysobjects
WHERE name = 'sp_EnableAllConstraints' AND type = 'P')
DROP PROCEDURE dbo.sp_EnableAllConstraints
GO
-- ....
-- ....
-- ....
En primer lugar tendrá que desactivar todos los disparadores:
sp_msforeachtable 'ALTER TABLE ? DISABLE TRIGGER all';
Ejecutar este secuencia de comandos: (Tomado de este post Gracias @SQLMenace)
SET NOCOUNT ON GO SELECT 'USE [' + db_name() +']'; ;WITH a AS ( SELECT 0 AS lvl, t.object_id AS tblID FROM sys.TABLES t WHERE t.is_ms_shipped = 0 AND t.object_id NOT IN (SELECT f.referenced_object_id FROM sys.foreign_keys f) UNION ALL SELECT a.lvl + 1 AS lvl, f.referenced_object_id AS tblId FROM a INNER JOIN sys.foreign_keys f ON a.tblId = f.parent_object_id AND a.tblID <> f.referenced_object_id ) SELECT 'Delete from ['+ object_schema_name(tblID) + '].[' + object_name(tblId) + ']' FROM a GROUP BY tblId ORDER BY MAX(lvl),1
Este script generará las declaraciones DELETE
en el orden correcto.a partir de tablas de referencia queridos a continuación hacen referencia a
Copiar las declaraciones
DELETE FROM
y ejecutarlos una vezactivar disparadores
sp_msforeachtable 'ALTER TABLE ? ENABLE TRIGGER all'
confirmar los cambios:
begin transaction commit;
Esto no funciona para mí, la consulta recursiva termina en un bucle. Tal vez por auto reverenses. –
EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
EXEC sp_MSForEachTable 'ALTER TABLE ? DISABLE TRIGGER ALL'
EXEC sp_MSForEachTable 'DELETE FROM ?'
EXEC sp_MSForEachTable 'ALTER TABLE ? CHECK CONSTRAINT ALL'
EXEC sp_MSForEachTable 'ALTER TABLE ? ENABLE TRIGGER ALL'
EXEC sp_MSFOREACHTABLE 'SELECT * FROM ?'
GO
- 1. ¿Eliminar todos los datos de la base de datos de SQL Server y luego volver a ingresar los datos de otra base de datos?
- 2. ¿Ver todos los elementos para las funciones en la base de datos de SQL Server?
- 3. cómo enumerar todos los objetos de una base de datos en particular en SQL Server 2005
- 4. Información de listado sobre todos los archivos de base de datos en SQL Server
- 5. Eliminar los últimos N caracteres del campo en una base de datos SQL Server
- 6. Traer la base de datos de SQL Server en línea
- 7. ¿Cómo puedo eliminar todos los desencadenantes en una base de datos MySQL usando una declaración SQL?
- 8. Múltiples idiomas en una base de datos - SQL Server 2005
- 9. Sincronización entre la base de datos SQL Lite en un dispositivo android y la base de datos SQL Server
- 10. ¿Quitar usuario de la base de datos de SQL Server?
- 11. ¿Cómo se migran los diagramas de la base de datos de SQL Server a otra base de datos?
- 12. Base de datos SQL Azure usando SQL Server Management Studio
- 13. Sincronización en tiempo real de los datos de la base de datos en todos los clientes
- 14. ¿El Asesor de ajuste de base de datos de SQL Server modifica los datos?
- 15. Migrar la base de datos SQLite a Microsoft SQL Server
- 16. Código para insertar datos en la base de datos de SQL Server usando la biblioteca Enterprise
- 17. ¿Cómo se eliminan todos los procedimientos almacenados a la vez en la base de datos de SQL Server?
- 18. MySQL: Recorte todos los campos en la base de datos
- 19. Eliminar (fusionar) Archivo de datos secundarios de la base de datos SQL Servers
- 20. Cómo eliminar la base de datos, la base de datos de error 5030 no se puede bloquear
- 21. Buscar un objeto en SQL Server (base de datos cruzada)
- 22. Crear una base de datos mediante programación en SQL Server
- 23. Base de datos SQL Server 2005 'En recuperación'
- 24. ¿Cómo creo una base de datos programáticamente en SQL Server?
- 25. Cambiar el nombre del archivo de datos de la base de datos en SQL Server 2005
- 26. Restaurar la base de datos de SQL Server 2008 a SQL Server 2000
- 27. ¿Cómo convertir la base de datos de SQL Server 2008 R2 a SQL Server 2012?
- 28. Desventajas del uso de SQL Server Compact frente a la base de datos SQL Server dedicada
- 29. Mostrar datos de la base de datos SQL en Gridview
- 30. Exponer la base de datos de SQL Server como servicio web para obtener datos de
Me ... Pude borrar, pero no truncar. – Marcel
También podría tener sentido hacer un 'EXEC sp_MSForEachTable' DBCC CHECKIDENT (''? '', RESEED, 0) ''después de DELETE FROM para restablecer todas las columnas de identidad a 0. –
Siempre es un buen comienzo para el ¡día cuando encuentras 6 líneas de código que reemplazan 100s de instrucciones de eliminación! Este método funciona sin problemas en SQL 2014 Express. – Tommy