Created
February 2, 2018 16:43
-
-
Save dennisroche/485e589dda87c2d586a2c872e776e43d to your computer and use it in GitHub Desktop.
Drop entire SQL Server schema
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
DECLARE @schema VARCHAR(128) | |
SET @schema = 'dbo' --< change this | |
/* 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_SCHEMA=@schema AND 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 [' + RTRIM(@schema) + '].[' + 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_SCHEMA=@schema AND CONSTRAINT_CATALOG=DB_NAME() AND CONSTRAINT_TYPE = 'FOREIGN KEY' ORDER BY TABLE_NAME) | |
END | |
/* Drop all Primary Key constraints */ | |
SELECT @name = (SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE CONSTRAINT_SCHEMA=@schema AND 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_SCHEMA=@schema AND 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 [' + RTRIM(@schema) + '].[' + 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_SCHEMA=@schema AND 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_SCHEMA=@schema AND CONSTRAINT_CATALOG=DB_NAME() AND CONSTRAINT_TYPE = 'PRIMARY KEY' ORDER BY TABLE_NAME) | |
END | |
/* Drop all tables */ | |
SELECT @name = (SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA=@schema AND TABLE_CATALOG=DB_NAME() ORDER BY TABLE_NAME) | |
WHILE @name IS NOT NULL | |
BEGIN | |
SELECT @SQL = 'DROP TABLE [' + RTRIM(@schema) + '].[' + RTRIM(@name) +']' | |
EXEC (@SQL) | |
PRINT 'Dropped Table: ' + @name | |
SELECT @name = (SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA=@schema AND TABLE_CATALOG=DB_NAME() ORDER BY TABLE_NAME) | |
END | |
/* Drop schema */ | |
SELECT @SQL = 'DROP SCHEMA [' + RTRIM(@schema) + ']' | |
EXEC (@SQL) | |
PRINT 'Dropped Schema: ' + @schema | |
/* Drop migration history */ | |
SELECT @SQL = 'DROP TABLE [_ef].[' + RTRIM(UPPER(LEFT(@schema,1))+LOWER(SUBSTRING(@schema,2,LEN(@schema)))) + 'MigrationHistory]' | |
EXEC (@SQL) | |
PRINT 'Dropped Migration History: ' + @schema | |
GO |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment