A few weeks ago, I wrote a post about deleting all tables and constraints in a database. It’s time to take that one step further!
The following SQL code will delete all stored procedures, user-defined functions (UDFs), views, table constraints, and tables (in that order) from a given SQL database. As with the original, you can specify an object name previx by changing the set @tblname = ''
as needed.
This is helpful in two situations:
- When you want to delete all objects in a database without dropping/recreating it, in which case you’d specify
'%'
as the@tblname
. - When you want to delete all objects in a database whose name starts with a certain sequence of characters. For example, if you want to delete all the ASP.Net membership objects in a database, you can specify
'%aspnet_%'
as the@tblname
, since its SQL objects start withaspnet_
orvw_aspnet_
.
Note that you should be very careful any time you use scripts like this, as data loss can happen where you least expect it. I use this script for clearing out development databases, but would never use it for production databases.
Anyway, on to the script.
declare @sql varchar(max) declare @tbl varchar(255) declare @tblname varchar(255) --dpecify the "like" clause for your tables here --to match all tables, use '%' set @tblname = '%' --drop stored procedures select name into #procs from sys.objects where type = 'P' and name like @tblname while (select count(*) from #procs) > 0 begin select top 1 @tbl = name from #procs set @sql = 'drop procedure ' + @tbl exec (@sql) delete from #procs where name = @tbl end drop table #procs --drop UDFs select name into #funcs from sys.objects where type in( 'TF', 'FN' ) and name like @tblname while (select count(*) from #funcs) > 0 begin select top 1 @tbl = name from #funcs set @sql = 'drop function ' + @tbl exec (@sql) delete from #funcs where name = @tbl end drop table #funcs --drop views select name into #views from sys.objects where type = 'V' and name like @tblname while (select count(*) from #views) > 0 begin select top 1 @tbl = name from #views set @sql = 'drop view ' + @tbl exec (@sql) delete from #views where name = @tbl end drop table #views --drop constraints select 'alter table ' + table_schema + '.' + table_name + ' drop constraint ' + constraint_name as query into #constraints from information_schema.table_constraints where constraint_type = 'foreign key' and table_name like @tblname while (select count(*) from #constraints) > 0 begin select top 1 @sql = query from #constraints exec (@sql) delete from #constraints where query = @sql end drop table #constraints --drop tables select name into #tables from sys.objects where type = 'U' and name like @tblname while (select count(*) from #tables) > 0 begin select top 1 @tbl = name from #tables set @sql = 'drop table ' + @tbl exec (@sql) delete from #tables where name = @tbl end drop table #tables go
Jon Kragh says:
Great script, it is quite useful! Thank you for sharing.
dave says:
Thanks mate. This is exactly what I was after.