Dropping Multiple Tables at Once Via T-SQL

November 26th, 2010
by The Grateful DBA

From time to time we have the need to drop multiple tables within a single stored procedure. Were you aware that it can be done in single DROP TABLE statement? SELECTing multiple columns, constants, variables, etc. in a single SELECT is one of the first things we learn as SQL newbies. But dropping two or more tables at the same time, while slightly less common, is just as convenient.

So, instead of…

DROP TABLE A;
DROP TABLE B;
DROP TABLE C;

we can…
DROP TABLE A, B, C;

Not only can we do this with normal tables, we also have the ability to drop temp tables; both local and global, as well at the same time. How convenient is that?

This little block of code will create normal, local temp, & global temp tables, fill them in with sample data, show the data’s there, drop the tables using this “new” syntax, then show that all three tables are indeed gone.

 
USE tempdb
SET NOCOUNT ON

-- Create a local temp table
CREATE TABLE #localTempTable (i INT)

-- Fill the local temp table with sample data
INSERT INTO #localTempTable
SELECT id FROM sysobjects

-- Show that the local temp table is filled
SELECT COUNT(i) localTempTable FROM #localTempTable

GO

-- Create a global temp table
CREATE TABLE ##globalTempTable (i INT)

-- Fill the global temp table with sample data
INSERT INTO ##globalTempTable
SELECT id  FROM sysobjects

-- Show that the global temp table is filled
SELECT COUNT(i) globalTempTable FROM ##globalTempTable

GO

-- Create a real table
CREATE TABLE RealTable (i INT)

-- Fill the real table with sample data
INSERT INTO RealTable
SELECT id  FROM sysobjects

-- Show that the real table is filled
SELECT COUNT(i) realTable FROM RealTable

GO

-- Drop the tables using the "new" syntax
DROP TABLE #localTempTable, ##globalTempTable, RealTable

GO

-- Show that the objects are indeed gone
IF OBJECT_ID(N'tempdb..#localTempTable', N'U') IS NULL
  SELECT '#localTempTable is gone'
ELSE
  SELECT '#localTempTable is still there'
  
IF OBJECT_ID(N'tempdb..##globalTempTable', N'U') IS NULL
  SELECT '##globalTempTable is gone'
ELSE
  SELECT '##globalTempTable is still there'
  
IF OBJECT_ID(N'tempdb..RealTable', N'U') IS NULL
  SELECT 'RealTable is gone'
ELSE
  SELECT 'RealTable is still there'

And while these days it seems like we DELETE less and archive a lot more, it’s still nice to know that we do have a couple options when it comes to performing this most basic, but vital operation in SQL Server.

Have a grateful day…Troy

Bookmark this on Delicious
Bookmark this on Digg
Share on Facebook
Bookmark this on Google Bookmarks
Share on LinkedIn
Bookmark this on Yahoo Bookmark

Tags: , , , ,
Posted in T-SQL | Comments (1)

One Response to “Dropping Multiple Tables at Once Via T-SQL”

  1. Tweets that mention The Grateful DBA ยป Dropping Multiple Tables at Once Via T-SQL -- Topsy.com Says:

    [...] This post was mentioned on Twitter by mike, Troy Gallant. Troy Gallant said: [New Blog Post] "Dropping Multiple Tables at Once Via T-SQL" http://troygallant.com/?p=798 [...]

Leave a Reply

Get Adobe Flash playerPlugin by wpburn.com wordpress themes