DROP TABLE (Transact-SQL)

Quita una o varias definiciones de tabla y todos los datos, índices, desencadenadores, restricciones y especificaciones de permisos de esas tablas. Las vistas o procedimientos almacenados que hagan referencia a la tabla quitada se deben quitar explícitamente con DROP VIEW o DROP PROCEDURE. Para crear informes de las dependencias de una tabla, utilice sys.dm_sql_referencing_entities.

Sintaxis

DROP TABLE [ database_name . [ schema_name ] . | schema_name . ]
        table_name [ ,...n ] [ ; ]

Argumentos

  • database_name
    Es el nombre de la base de datos en la que se creó la tabla.

  • schema_name
    Es el nombre del esquema al que pertenece la tabla.

  • table_name
    Es el nombre de la tabla que se va a quitar.

Comentarios

No se puede utilizar DROP TABLE para quitar una tabla a la que haga referencia una restricción FOREIGN KEY. Primero se debe quitar la restricción FOREIGN KEY o la tabla de referencia. Si la tabla de referencia y la tabla que tiene la clave principal se van a quitar en la misma instrucción DROP TABLE, la tabla de referencia debe aparecer primero.

Se pueden quitar varias tablas de cualquier base de datos. Si la tabla que se va a quitar hace referencia a la clave principal de otra tabla que también se va a quitar, la tabla de referencia con la clave externa debe aparecer antes que la tabla que tiene la clave principal a la que se hace referencia.

Cuando se quita la tabla, las reglas o valores predeterminados de la tabla pierden sus enlaces y se quitan automáticamente las restricciones o desencadenadores asociados con la tabla. Si vuelve a crear una tabla, debe volver a enlazar las reglas y valores predeterminados apropiados, volver a crear los desencadenadores y agregar todas las restricciones necesarias.

Si elimina todas las filas de una tabla con DELETE tablename o utiliza la instrucción TRUNCATE TABLE, la tabla existe hasta que se quita.

Los índices y las tablas grandes que utilizan más de 128 extensiones se quitan en dos fases independientes: lógica y física. En la fase lógica, las unidades de asignación existentes que utiliza la tabla se marcan para la cancelación de asignación y se bloquean hasta que se confirme la transacción. En la fase física, las páginas IAM marcadas para cancelación de asignación se quitan físicamente por lotes. Para obtener más información, vea Quitar y volver a generar objetos grandes.

Si quita una tabla que contiene una columna de tipo VARBINARY(MAX) con el atributo FILESTREAM, los datos almacenados en el sistema de archivos no se quitarán.

Nota importanteImportante

DROP TABLE y CREATE TABLE no se deberían ejecutar en la misma tabla en el mismo lote. De lo contrario, podría producirse un error inesperado.

Permisos

Es necesario el permiso ALTER en el esquema al que pertenece la tabla, el permiso CONTROL en la tabla o la pertenencia al rol fijo de base de datos db_ddladmin.

Ejemplos

A. Quitar una tabla de la base de datos actual

En el siguiente ejemplo se quita la tabla ProductVendor1, y sus datos e índices de la base de datos actual.

DROP TABLE ProductVendor1 ;

B. Quitar una tabla de otra base de datos

En el siguiente ejemplo se quita la tabla SalesPerson2 de la base de datos AdventureWorks2008R2. El ejemplo se puede ejecutar desde cualquier base de datos de la instancia de servidor.

DROP TABLE AdventureWorks2008R2.dbo.SalesPerson2 ;

C. Quitar una tabla temporal

En el siguiente ejemplo se crea una tabla temporal, se comprueba si existe, se quita y se comprueba de nuevo si existe.

USE AdventureWorks2008R2;
GO
CREATE TABLE #temptable (col1 int);
GO
INSERT INTO #temptable
VALUES (10);
GO
SELECT * FROM #temptable;
GO
IF OBJECT_ID(N'tempdb..#temptable', N'U') IS NOT NULL 
DROP TABLE #temptable;
GO
--Test the drop.
SELECT * FROM #temptable;