Skip to content

Instantly share code, notes, and snippets.

@pimentelra
Last active June 3, 2019 14:04
Show Gist options
  • Save pimentelra/babfec1db1f30e7eaa9f2d6d1fad56e8 to your computer and use it in GitHub Desktop.
Save pimentelra/babfec1db1f30e7eaa9f2d6d1fad56e8 to your computer and use it in GitHub Desktop.
Drop all the objects in a schema
-- SQL SERVER
-- change values inserted in @schema_list to the schemas you want to drop the objects from
SET NOCOUNT ON;
DECLARE
@sql NVARCHAR(MAX);
SET @sql = '';
DECLARE
@schema_list TABLE (
schema_name NVARCHAR(100)
);
INSERT INTO @schema_list
VALUES ('schema_1')
, ('schema_2')
SELECT @sql +=
'ALTER TABLE ' + QUOTENAME(SCHEMA_NAME(t.schema_id))
+ '.' + QUOTENAME(OBJECT_NAME(s.parent_object_id))
+ ' DROP CONSTRAINT ' + QUOTENAME(s.name) + ';'
FROM sys.foreign_keys s
JOIN sys.tables t ON s.parent_object_id = t.object_id
JOIN sys.tables t2 ON s.referenced_object_id = t2.object_id
WHERE t2.schema_id IN ( SELECT SCHEMA_ID(schema_name) FROM @schema_list )
SELECT @sql +=
'DROP ' +
CASE
WHEN type = 'SO' THEN 'SEQUENCE'
WHEN type IN ('P', 'PC') THEN 'PROCEDURE'
WHEN type = 'U' THEN 'TABLE'
WHEN type IN ('IF', 'TF', 'FN') THEN 'FUNCTION'
WHEN type = 'V' THEN 'VIEW'
END +
' ' + QUOTENAME(SCHEMA_NAME(schema_id)) + '.' + QUOTENAME(name) + ';'
FROM sys.objects
WHERE schema_id IN ( SELECT SCHEMA_ID(schema_name) FROM @schema_list )
AND type IN ('SO', 'P', 'PC', 'U', 'IF', 'TF', 'FN', 'V')
ORDER BY CASE
WHEN type = 'SO' THEN 1
WHEN type IN ('P', 'PC') THEN 5
WHEN type = 'U' THEN 4
WHEN type IN ('IF', 'TF', 'FN') THEN 2
WHEN type = 'V' THEN 3
END
SELECT @sql +=
'DROP XML SCHEMA COLLECTION '
+ QUOTENAME(SCHEMA_NAME(schema_id)) + '.' + QUOTENAME(name) + ';'
FROM sys.xml_schema_collections
WHERE schema_id IN ( SELECT SCHEMA_ID(schema_name) FROM @schema_list )
SELECT @sql +=
'DROP SCHEMA ' + QUOTENAME(schema_name) + ';'
FROM @schema_list;
EXEC sp_executesql @sql;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment