hilo Algo viejo lo sé, pero yo estaba buscando algo como esto y encontré la respuesta original, muy útil. Dicho esto, la secuencia de comandos también intentará eliminar las vistas que puedan existir en ese esquema y le dará un mensaje de error porque terminará tratando de descartar una vista emitiendo una instrucción DROP TABLE.
Terminé escribiendo esto porque necesitaba eliminar todas las tablas, vistas, procedimientos y funciones de un esquema dado. Tal vez no sea la manera más elegante de lograr esto, pero funcionó para mí y pensé que lo compartiría.
DECLARE @Sql VARCHAR(MAX)
, @Schema varchar(20)
SET @Schema = 'Integration' --put your schema name between these quotes
--tables
SELECT @Sql = COALESCE(@Sql,'') + 'DROP TABLE %SCHEMA%.' + QUOTENAME(TABLE_NAME) + ';' + CHAR(13)
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = @Schema
AND TABLE_TYPE = 'BASE TABLE'
ORDER BY TABLE_NAME
--views
SELECT @Sql = COALESCE(@Sql,'') + 'DROP VIEW %SCHEMA%.' + QUOTENAME(TABLE_NAME) + ';' + CHAR(13)
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = @Schema
AND TABLE_TYPE = 'VIEW'
ORDER BY TABLE_NAME
--Procedures
SELECT @Sql = COALESCE(@Sql,'') + 'DROP PROCEDURE %SCHEMA%.' + QUOTENAME(ROUTINE_NAME) + ';' + CHAR(13)
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_SCHEMA = @Schema
AND ROUTINE_TYPE = 'PROCEDURE'
ORDER BY ROUTINE_NAME
--Functions
SELECT @Sql = COALESCE(@Sql,'') + 'DROP FUNCTION %SCHEMA%.' + QUOTENAME(ROUTINE_NAME) + ';' + CHAR(13)
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_SCHEMA = @Schema
AND ROUTINE_TYPE = 'FUNCTION'
ORDER BY ROUTINE_NAME
SELECT @Sql = COALESCE(REPLACE(@Sql,'%SCHEMA%',@Schema), '')
PRINT @Sql
Y si realmente ** ** querían hacerlo de una sola vez, podrían exec (o sp_executesql ejecutivo) @SqlStatement al final. – DaveShaw
no funcionará si su base de datos tiene alguna restricción en absoluto – ladieu
@ladieu - ¿qué le hace decir eso? Funciona si tienes restricciones ... – AdaTheDev