Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SQL Server 2008 delete all tables under special schema

Tags:

sql

sql-server

Hello I would like to know is is possible to drop all tables in database what was created under custom schema for example DBO1...with one sql query or special script.

Thanks

like image 366
Arbejdsglæde Avatar asked Jan 19 '12 21:01

Arbejdsglæde


People also ask

How do I select all tables in a schema?

The easiest way to find all tables in SQL is to query the INFORMATION_SCHEMA views. You do this by specifying the information schema, then the “tables” view. Here's an example. SELECT table_name, table_schema, table_type FROM information_schema.

How do I delete all tables at once?

Select all of the tables in your database in the Schema Browser clicking on the first table, holding Shift, and clicking on the last table. Right-click on the selected tables and select “Drop (n) Tables…” Click on Review SQL, as we will need to add in the foreign key check disable and enable.


2 Answers

This will generate all the DROP TABLE statements for you and PRINT the SQL statement out. You can then validate it's what you expect before copying and executing. Just make sure you are 100% sure...maybe take a backup first :)

DECLARE @SqlStatement NVARCHAR(MAX) SELECT @SqlStatement =      COALESCE(@SqlStatement, N'') + N'DROP TABLE [DBO1].' + QUOTENAME(TABLE_NAME) + N';' + CHAR(13) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'DBO1' and TABLE_TYPE = 'BASE TABLE'  PRINT @SqlStatement 
like image 67
AdaTheDev Avatar answered Sep 22 '22 22:09

AdaTheDev


Somewhat old thread I know, but I was looking for something like this and found the original answer very helpful. That said, the script will also try to drop views that might exist in that schema and give you an error message because you end up trying to drop a view by issuing a DROP TABLE statement.

I ended up writing this because I needed to drop all tables, views, procedures and functions from a given schema. Maybe not the most elegant way to accomplish this, but it worked for me and I thought I'd share.

DECLARE @Sql VARCHAR(MAX)       , @Schema varchar(20)  SET @Schema = 'Integration' --put your schema name between these quotes  --tables SELECT @Sql = COALESCE(@Sql,'') + 'DROP TABLE %SCHEMA%.' + QUOTENAME(TABLE_NAME) + ';' + CHAR(13) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = @Schema     AND TABLE_TYPE = 'BASE TABLE' ORDER BY TABLE_NAME   --views SELECT @Sql = COALESCE(@Sql,'') + 'DROP VIEW %SCHEMA%.' + QUOTENAME(TABLE_NAME) + ';' + CHAR(13) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = @Schema     AND TABLE_TYPE = 'VIEW' ORDER BY TABLE_NAME  --Procedures SELECT @Sql = COALESCE(@Sql,'') + 'DROP PROCEDURE %SCHEMA%.' + QUOTENAME(ROUTINE_NAME) + ';' + CHAR(13) FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_SCHEMA = @Schema     AND ROUTINE_TYPE = 'PROCEDURE' ORDER BY ROUTINE_NAME  --Functions SELECT @Sql = COALESCE(@Sql,'') + 'DROP FUNCTION %SCHEMA%.' + QUOTENAME(ROUTINE_NAME) + ';' + CHAR(13) FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_SCHEMA = @Schema     AND ROUTINE_TYPE = 'FUNCTION' ORDER BY ROUTINE_NAME   SELECT @Sql = COALESCE(REPLACE(@Sql,'%SCHEMA%',@Schema), '')  PRINT @Sql 
like image 29
Kevo Avatar answered Sep 21 '22 22:09

Kevo