El script SQL compartido en esta página es la versión #2 de algo que ya se había publicado en este enlace en Septiembre/2020.
La diferencia básicamente es que esta versión #2 elimina TODOS LOS OBJETOS de la base de datos -exceptuando la tabla y procedimientos que MSSQL pone cuando se crean diagramas de la base de datos- sin pedir confirmación alguna.
MUY IMPORTANTE
Este sitio web y el autor de esta nota no se hace responsable de los resultados obtenidos por la mala ejecución de este script.
Texto coloreado utilizando [ tohtml.com ] | Descargar archivo |
-- SSI base de datos en uso es distinta a "master" => Se ejecutarán los comandos de eliminación de objetos use [master]; go -- Inicialización de variables declare @n int, @i int, @XSQL varchar(max), @stk varchar(max); declare @tProtectedObject table (OBJ_NAME varchar(300)); declare @tSQL table ( ROWID int identity (1, 1) not null, GROUP_NUMBER int not null, XSQL varchar(max)) set nocount on; set @stk = char(13) + replicate('*', 75) + char(13); -- Se muestra cantidad de objetos por tipo que existen select type, type_desc, COUNT(*) as CANTIDAD_ANTES from sys.objects group by type, type_desc order by 1, 2; -- Se ponen en tabla [@tProtectedObject] lista de objetos que no se deberán eliminar insert into @tProtectedObject (OBJ_NAME) values ('sysdiagrams'), ('sp_alterdiagram'), ('sp_creatediagram'), ('sp_dropdiagram'), ('sp_helpdiagramdefinition'), ('sp_helpdiagrams'), ('sp_renamediagram'), ('sp_upgraddiagrams'), ('fn_diagramobjects'); -- Se ponen en table [@tSQL] los comandos para eliminar llaves foráneas, funciones, procedimientos, vistas y tablas insert into @tSQL (GROUP_NUMBER, XSQL) -- Eliminación de llaves foráneas select 10 as GROUP_NUMBER, 'alter table [' + e.name + '].[' + c.name + '] drop constraint [' + b.name + '];' as XSQL from sys.objects a inner join sys.foreign_keys b on b.referenced_object_id = a.object_id inner join sys.objects c on c.object_id = b.parent_object_id inner join sys.schemas d on d.schema_id = a.schema_id inner join sys.schemas e on e.schema_id = c.schema_id left outer join @tProtectedObject po on po.OBJ_NAME = a.[name] left outer join @tProtectedObject po2 on po2.OBJ_NAME = c.[name] where po.OBJ_NAME is null and po2.OBJ_NAME is null union -- Eliminación de funciones, procedimientos, vistas y tablas select a.GROUP_NUMBER, 'drop ' + lower(a.OBJ_TYPE) + ' [' + a.OBJ_SCHEMA + '].[' + a.OBJ_NAME + ']' as XSQL from ( -- Eliminación de funciones select 70 as GROUP_NUMBER, 'FUNCTION' as OBJ_TYPE, b.[name] as OBJ_SCHEMA, a.name as OBJ_NAME from sys.objects a inner join sys.schemas b on b.[schema_id] = a.[schema_id] left outer join @tProtectedObject po on po.OBJ_NAME = a.[name] where a.type in ('fn', 'TF') and po.OBJ_NAME is null union -- Eliminación de procedimientos select 80 as GROUP_NUMBER, 'PROCEDURE' as OBJ_TYPE, b.[name] as OBJ_SCHEMA, a.name as OBJ_NAME from sys.objects a inner join sys.schemas b on b.[schema_id] = a.[schema_id] left outer join @tProtectedObject po on po.OBJ_NAME = a.[name] where a.type in ('p') and po.OBJ_NAME is null union -- Elimiación de vistas select 90 as GROUP_NUMBER, 'VIEW' as OBJ_TYPE, b.[name] as OBJ_SCHEMA, a.name as OBJ_NAME from sys.objects a inner join sys.schemas b on b.[schema_id] = a.[schema_id] left outer join @tProtectedObject po on po.OBJ_NAME = a.[name] where a.type in ('v') and po.OBJ_NAME is null union -- Eliminación de tablas select 100 as GROUP_NUMBER, 'TABLE' as OBJ_TYPE, b.[name] as OBJ_SCHEMA, a.name as OBJ_NAME from sys.objects a inner join sys.schemas b on b.[schema_id] = a.[schema_id] left outer join @tProtectedObject po on po.OBJ_NAME = a.[name] where a.type in ('u') and po.OBJ_NAME is null ) a order by 1, 2; -- Ejecución de comandos de eliminación de objetos if ((db_name() = 'master')) print @stk + 'No se ejecutarán los comandos por estar en la base de datos [master]' + @stk; begin set @n = (select count(*) from @tSQL); if (@n > 0) print @stk + 'Comandos a ejecutar' + @stk; set @i = 1; while (@i <= @n) begin set @XSQL = (select XSQL from @tSQL where ROWID = @i); print @XSQL; if ((not db_name() = 'master')) exec (@XSQL); set @i += 1; end; end; if ((not db_name() = 'master')) print @stk + '¡¡¡Comandos ejecutados!!!' + @stk; -- Se muestra cantidad de objetos por tipo que han quedado select type, type_desc, COUNT(*) as CANTIDAD_DESPUES from sys.objects group by type, type_desc order by 1, 2; set nocount off; go
Política de PrivacidadÚltima actualización: 23 de diciembre de 2024 |
X |
Tu privacidad es importante para nosotros. En esta política de privacidad, explicamos qué información recopilamos cuando visitas nuestro sitio web y cómo utilizamos esa información.
Este sitio no recopila información personal de los usuarios, excepto cuando un usuario elige voluntariamente comunicarse a través del formulario de contacto. En ese caso, los datos proporcionados (como tu nombre y correo electrónico) se utilizarán únicamente para responder a tu consulta.
Este sitio web utiliza una única cookie esencial llamada PHPSESSID
.
PHPSESSID
se utiliza exclusivamente en la página de contacto para gestionar el funcionamiento del CAPTCHA. Esto garantiza que el formulario de contacto funcione correctamente y evita envíos automáticos o maliciosos.No usamos cookies de análisis ni de seguimiento.
Adoptamos medidas técnicas y organizativas razonables para proteger cualquier información que compartas con nosotros contra el acceso no autorizado, pérdida o alteración.
Nuestro sitio web puede contener enlaces a otros sitios web. No somos responsables de las prácticas de privacidad ni del contenido de dichos sitios.
Nos reservamos el derecho de actualizar esta política de privacidad en cualquier momento. Cualquier cambio será publicado en esta misma página e incluirá la fecha de la última actualización.
Si tienes preguntas o inquietudes sobre esta política de privacidad, puedes comunicarte con nosotros a través de la página de contacto disponible en este sitio web.
Nuestro sitio web cumple con las principales regulaciones internacionales de protección de datos personales para garantizar la privacidad y seguridad de los usuarios. Esto incluye, pero no se limita a, las siguientes leyes:
Si tienes preguntas o dudas sobre el cumplimiento de estas leyes, no dudes en ponerte en contacto conmigo a través de la página de contacto de este sitio web.