2011-10-04 16 views
7

Estoy usando sql-server 2005. Inicialmente, con fines de aprendizaje, creé muchas tablas ahora quiero eliminar todas esas tablas, excepto una que es actualmente estoy trabajando en. ¿Hay algún código o consulta con el que pueda eliminar todas las tablas de esa base de datos, excepto esa tabla útil? Una forma de hacerlo es copiar esa tabla en una nueva base de datos usando la cláusula SELECT INTO... y soltar esa base de datos, pero no sé si esta es una buena manera de resolver este problema.Cómo colocar todas las tablas de una base de datos en SQL Server 2005 en una declaración, excepto una tabla

+1

Si las tablas no son muy grandes, probablemente las seleccione todas en la ventana "Detalles del explorador de objetos" en SSMS y luego presione eliminar. –

+0

Gracias @MartinSmith esta es una buena manera, pero ¿hay alguna manera con la que pueda hacer lo mismo usando sentencias? – Manish

Respuesta

7

Si las tablas no son muy grandes, probablemente las haya seleccionado todas en la ventana "Detalles del explorador de objetos" en SSMS y luego pulse eliminar.

Para una solución de programación se puede utilizar

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

Ambos métodos pueden necesitar distintas ejecuciones con el fin de eliminar todas las tablas implicadas en las relaciones FK (una tabla no se puede eliminar si otra mesa tiene una FK referencia a ella).

+3

Para elaborar un poco sobre la solución de la interfaz de usuario: F7 es el método abreviado de teclado Detalles del explorador de objetos. No puede seleccionar objetos múltiples en la vista de árbol del explorador de objetos, pero puede seleccionar el nodo Tablas en la vista de árbol y presionar F7 para mostrar los detalles del Explorador de objetos. –

6

Puede usar sql para crear todas las estaciones de cambios que necesite. Por ejemplo, la siguiente consulta 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') 

y obtener el resultado al ejecutar la consulta.

Copie la primera columna de la consulta y péguelo en una nueva ventana de consulta.

Es fácil ver, que se obtiene una lista de staments de caída para todas las tablas excepto 'TableNameOne' y 'TableNameTwo', ...

Im piensan que es muy sencilla ...

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

esto lo sirve! Gracias – ben

Cuestiones relacionadas