Scripting the deletion of objects in a SQL database (second version)

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 with aspnet_ or vw_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
Bookmark and Share

Popularity: 7% [?]

Related Posts

In free markets, both success and failure are options. If government interventions prevent businesses . . . from failing, then it is not truly a free market. As painful as it might be, [companies] must be allowed to fail.

-- Ron Paul, US Representative (Texas)

Comments 1

  1. Jon Kragh wrote:

    Great script, it is quite useful! Thank you for sharing.

    Posted 19 Nov 2009 at 7:33 am

Post a Comment

Your email is never published nor shared. Required fields are marked *