Como eliminar masivamente tablas y procedimientos de una base de datos MS SQL
Esto se puede hacer a través de un procedimiento almacenado sencillo sp_MSforeachtable, es un procedimiento almacenado oculto in SQL Server, el cuál se ejecuta por cada tabla que hay en la base de datos activa. Hay que tener en cuenta que esa operación no se puede deshacer, así que hay que estar seguro de lo que se quiere hacer.
El tema es cuando queremos borrar muchas tablas o la totalidad de las tablas.
Vamos a ver un procedimiento que borra todas las tablas que no tengan integridad referencial, si hay integridad referencial hay que hacer mas pasos que veremos mas adelante.
y creamos un store procedure con esta sentencia
EXEC sp_MSforeachtable @command1 = "DROP TABLE ?"
sp_MSforeachtable, es un procedimiento almacenado oculto in SQL Server, el cuál se ejecuta por cada tabla que hay en la base de datos activa. Hay que tener en cuenta que esa operación no se puede deshacer, así que hay que estar seguro de lo que se quiere hacer.
Si hay problemas con el comando anterior es porque seguramente hay reglas de integridad entre las tablas y por eso no las puede borrar. En ese caso lo mejor es hacer mejor lo siguiente:
- -- Primero desabilitar la integridad referencial
EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
GO
EXEC sp_MSforeachtable @command1 = "DROP TABLE ?"
GO
2. -- Ahora volver a habilitar la integridad referencial
EXEC sp_MSForEachTable 'ALTER TABLE ? CHECK CONSTRAINT ALL'
GO
Para borrar un procedimiento Almacenado hacemos
DROP PROCEDURE dbo.uspMyProc; GO
Se puede eliminar los store procedures, desde SQL Server Managment Studio, haciendo clic derecho sobre el procedure, y seleccionando delete pero uno por uno, si hubiera un shift select/delete, y la otra forma, hasta donde se :$ , es haciéndolo por código.
Usando Transact-SQL
- Para eliminar un procedimiento en el Editor de consultas
- En el Explorador de objetos, conéctese a una instancia de Motor de base de datos y luego expanda esa instancia.
- Expanda Bases de datos, expanda la base de datos a la que pertenece el procedimiento o, desde la barra de herramientas, seleccione la base de datos de la lista de bases de datos disponibles.
- En el menú Archivo, haga clic en Nueva consulta.
- Obtenga el nombre del procedimiento almacenado para eliminar en la base de datos actual. Desde el Explorador de objetos, expanda Programabilidad y luego expanda Procedimientos almacenados. Alternativamente, en el editor de consultas, ejecute la siguiente declaración.
- Copie y pegue el siguiente ejemplo en el editor de consultas e inserte un nombre de procedimiento almacenado para eliminarlo de la base de datos actual.
SELECT name AS procedure_name
,SCHEMA_NAME(schema_id) AS schema_name
,type_desc
,create_date
,modify_date
FROM sys.procedures;
Con este procedimiento obtenmos el nombre de todos los stored procedures de nuestra base.
En mi caso tengo que eliminar 5000 procedimientos asi que me ayudo con el excel para generar el segundo procediento
Copy pasteamos la lista a nuestro excel usando la funcion CONCATENAR
=CONCATENAR(A1;B1;C1)
podemos armar el stored procedure que necesitamos
en la primer columna ponemos
dbo.
en la segunda el contendio que viene del procedimiento anterior
en la tercera coma
y en la ultima pegamos la formula de concatenar
y queda como la imagen que sigue
y luego la pegamos en el siguiente procemiento
DROP PROCEDURE <stored procedure name>, GO
Porque podemos queres hacer esto y no sencillamente
una base de datos de 0?
Puede haber varias razones que queremos conservar
permisos y otras funciones triger, etc de una base
de datos existente... etc
Referencias
https://infoinnova.net/2013/09/t-sql-eliminar-todas-las-tablas-de-una-base-de-datos/
Comentarios