2011-10-04 12 views
7

SQL Server 2005を使用しています。最初は学習目的で多数のテーブルを作成しましたが、現在私は取り組んでいます。 1つの有用なテーブル以外のデータベースからすべてのテーブルを削除できるコードやクエリはありますか? 私が思う一つの方法は、SELECT INTO...節を使ってそのテーブルを新しいデータベースにコピーし、そのデータベースを削除することですが、これはこの問題を解決する良い方法です。SQL Server 2005のデータベースからすべてのテーブルを1つのテーブル以外のステートメントにドロップする方法

+1

テーブルがあまり大きくない場合は、SSMSの[オブジェクトエクスプローラの詳細]ウィンドウですべてを選択してから削除してください。 –

+0

ありがとう@MartinSmithこれは良い方法ですが、文を使って同じことをすることができる方法はありますか? – Manish

答えて

7

テーブルのサイズがそれほど大きくない場合は、SSMSの[オブジェクトエクスプローラの詳細]ウィンドウですべてを選択してから削除してください。

プログラムで解決のためには、(別のテーブルには、それを参照FKを持っている場合は、テーブルを削除することはできません)どちらの方法がFK関係に関わるすべてのテーブルを削除するために繰り返し実行する必要があるかもしれません

EXEC sys.sp_MSforeachtable 
     N'IF OBJECT_ID(''?'') <> OBJECT_ID(''dbo.YourTableToKeep'') 
      DROP TABLE ? 
     ' 

を使用することができます。

+3

UIソリューションで少し詳しく説明します。F7はObject Explorer Detailsのキーボードショートカットです。オブジェクトエクスプローラツリービューでオブジェクトを複数選択することはできませんが、ツリービューでテーブルノードを選択し、F7キーを押してオブジェクトエクスプローラの詳細を表示することができます。これは –

6

sqlを使用すると、必要なすべてのドロップステムを作成できます。たとえば、次のSQLクエリ

USE [MyDatabase]; 
GO 
SELECT 
    replace(
     replace('DROP TABLE [{Schema}].[{TableName}];' 
     ,'{Schema}',TABLE_SCHEMA) 
     ,'{TableName}',TABLE_NAME) 
FROM 
    INFORMATION_SCHEMA.TABLES 
WHERE 
    TABLE_NAME NOT IN ('TableNameOne','TableNameTwo') 

を取得し、クエリを実行した結果を取得します。

クエリの最初の列をコピーし、新しいクエリウィンドウに貼り付けます。

あなたが、「TableNameOne」と「TableNameTwo」を除くすべてのテーブルのドロップstamentsのリストを取得することを、見やすいです...

イムは、それは非常に単純だと思う...

4
/* 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_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 [dbo].[' + 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_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'FOREIGN KEY' ORDER BY TABLE_NAME) 
END 
GO 

/* Drop all Primary 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_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_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 [dbo].[' + 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_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_catalog=DB_NAME() AND CONSTRAINT_TYPE = 'PRIMARY KEY' ORDER BY TABLE_NAME) 
END 
GO 

/* Drop all tables */ 
DECLARE @name VARCHAR(128) 
DECLARE @SQL VARCHAR(254) 

SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] = 'U' AND category = 0 ORDER BY [name]) 

WHILE @name IS NOT NULL 
BEGIN 
    SELECT @SQL = 'DROP TABLE [dbo].[' + RTRIM(@name) +']' 
    EXEC (@SQL) 
    PRINT 'Dropped Table: ' + @name 
    SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] = 'U' AND category = 0 AND [name] > @name ORDER BY [name]) 
END 
GO 
+0

です。ありがとう – ben

関連する問題