2011-10-04 58 views
7

我正在使用sql-server 2005.最初,爲了學習目的,我創建了很多表現在我想刪除除了一個表之外的所有表目前我正在努力。 是否有任何代碼或查詢與我可以刪除我的數據庫中的所有表,除了一個有用的表。 我認爲的一種方法是使用SELECT INTO...子句將該表複製到新數據庫並刪除該數據庫,但不知道這是解決此問題的好方法。如何從sql server 2005中的數據庫中刪除所有表,除了一個表之外

+1

如果表格不是很大,我可能只需在SSMS中的「對象瀏覽器詳細信息」窗口中選擇它們,然後點擊刪除。 –

+0

感謝@MartinSmith這是一個好方法,但是有什麼方法可以使用語句來做同樣的事情。 – Manish

回答

7

如果表格不是很大,我可能只需在SSMS中的「對象瀏覽器詳細信息」窗口中選擇它們,然後點擊刪除。

對於一個編程解決方案,你可以使用

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

這兩種方法可能需要以刪除參與FK關係中的所有表重複運行(表不能被刪除,如果另一表有FK引用它)。

+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

相關問題