DROP TABLE (Transact-SQL)

Se aplica a: SQL Server Azure SQL Database Azure SQL Instancia administrada Azure Synapse Analytics Analytics Platform System (PDW) Warehouse en Microsoft Fabric

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.

Convenciones de sintaxis de Transact-SQL

Sintaxis

-- Syntax for SQL Server, Azure SQL Database, Warehouse in Microsoft Fabric
  
DROP TABLE [ IF EXISTS ] { database_name.schema_name.table_name | schema_name.table_name | table_name } [ ,...n ]  
[ ; ]  
-- Syntax for Azure Synapse Analytics and Parallel Data Warehouse
  
DROP TABLE { database_name.schema_name.table_name | schema_name.table_name | table_name }
[;]  

Argumentos

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

Azure SQL Database admite el formato de nombre de tres partes nombre_basededatos.[nombre_esquema].nombre_objeto cuando nombre_basededatos es la base de datos actual o tempdb y nombre_objeto comienza con #. Azure SQL Database no admite nombres de cuatro partes.

IF EXISTS
Se aplica a: SQL Server (desde SQL Server 2016 (13.x) hasta la versión actual).

Quita la tabla condicionalmente solo si ya existe.

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.

Observaciones

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 utilizando el nombre de tabla DELETE 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.

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.

Cuando se quita una tabla de libro de contabilidad, también se quitan sus objetos dependientes (la tabla de historial y la vista del libro de contabilidad). Las tablas de historial o las vistas de libro de contabilidad no se pueden quitar directamente. El sistema aplica una semántica de eliminación temporal cuando se quitan las tablas de libro de contabilidad y sus objetos dependientes: no se quitan realmente, sino que se marcan como anuladas en las vistas del catálogo del sistema y se les cambia el nombre. Para más información, consulte el apartado Consideraciones y limitaciones del libro de contabilidad.

Importante

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

Se requiere 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 .

Si la instrucción quita una tabla de libro de contabilidad, se requiere el permiso ALTER LEDGER.

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 AdventureWorks2022. El ejemplo se puede ejecutar desde cualquier base de datos de la instancia de servidor.

DROP TABLE AdventureWorks2022.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. En este ejemplo no se utiliza la sintaxis IF EXISTS, que está disponible a partir de SQL Server 2016 (13.x).

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;  

D. Quitar una tabla con IF EXISTS

Se aplica a: SQL Server (desde SQL Server 2016 (13.x) hasta la versión actual).

En el ejemplo siguiente se crea una tabla denominada T1. A continuación, la segunda instrucción quita la tabla. La tercera instrucción no realiza ninguna acción porque ya se ha eliminado la tabla, pero tampoco provoca ningún error.

CREATE TABLE T1 (Col1 INT);  
GO  
DROP TABLE IF EXISTS T1;  
GO  
DROP TABLE IF EXISTS T1;  

Consulte también

ALTER TABLE (Transact-SQL)
CREATE TABLE (Transact-SQL)
DELETE (Transact-SQL)
sp_help (Transact-SQL)
sp_spaceused (Transact-SQL)
TRUNCATE TABLE (Transact-SQL)
DROP VIEW (Transact-SQL)
DROP PROCEDURE (Transact-SQL)
EVENTDATA (Transact-SQL)
sys.sql_expression_dependencies (Transact-SQL)