2011-10-04 10 views
7

Używam sql-server 2005. Początkowo, dla celów edukacyjnych stworzyłem wiele tabel teraz chcę upuścić wszystkie te tabele z wyjątkiem jednego, który jest obecnie nad tym pracuję. Czy istnieje kod lub zapytanie, za pomocą którego można usunąć wszystkie tabele z mojej bazy danych z wyjątkiem tej jednej przydatnej tabeli. Jednym ze sposobów jest skopiowanie tej tabeli do nowej bazy danych przy użyciu klauzuli SELECT INTO... i usunięcie tej bazy danych, ale nie wiem, czy jest to dobry sposób na rozwiązanie tego problemu.Jak usunąć wszystkie tabele z bazy danych w SQL Server 2005 w instrukcji z wyjątkiem jednej tabeli

+1

Jeśli tabele nie są zbyt duże, prawdopodobnie wybrałbym je wszystkie w oknie "Szczegóły eksploratora obiektów w SSMS", a następnie "usuń". –

+0

Dzięki @MartinSmith jest to dobry sposób, ale czy istnieje sposób, w jaki mogę zrobić to samo za pomocą wyciągów. – Manish

Odpowiedz

7

Jeśli stoły nie są zbyt duże, prawdopodobnie wybrałbym je wszystkie w oknie "Szczegóły eksploratora obiektu" w SSMS, a następnie naciśnij "usuń".

Dla programowego rozwiązania można użyć

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

Obie metody mogą wymagać wielokrotnych przebiegów w celu usunięcia wszystkich tabel zaangażowanych w relacjach FK (tabela nie może zostać usunięty, jeśli inny stół ma FK odsyłania go).

+3

Aby nieco rozwinąć rozwiązanie interfejsu: F7 to skrót klawiszowy Szczegóły eksploratora obiektów. Nie można wybierać wielu obiektów w widoku drzewa eksploratora obiektów, ale można wybrać węzeł Tabele w widoku drzewa i nacisnąć klawisz F7, aby wyświetlić Szczegóły eksploratora obiektów. –

6

Możesz użyć języka sql, aby utworzyć wszystkie upuszczane pliki, których potrzebujesz. Na przykład następna kwerenda sql

i uzyskać wynik wykonywania kwerendy.

Skopiuj pierwszą kolumnę zapytania i wklej ją w nowym oknie zapytania.

Łatwo zobaczyć, że masz listę staments spadek dla wszystkich tabel z wyjątkiem „TableNameOne” i „TableNameTwo”, ...

Im myśleć, że jest bardzo proste ...

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

to służy! Dzięki – ben

Powiązane problemy