Compartir a través de


MESA DE CAÍDA (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 soporta el formato database_name.schema_name.object_name de nombre en tres partes cuando database_name es la base de datos actual o database_name es tempdb y object_name comienza con # o ##. Azure SQL Database no admite nombres de cuatro partes.

SI EXISTE

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

DROP TABLE No puede usarse para eliminar una tabla que está referenciada por una FOREIGN KEY restricción. La restricción de FOREIGN KEY referencia o la tabla de referencias deben eliminarse primero.

Se pueden eliminar varias tablas en la misma DROP TABLE sentencia. Si tanto la tabla de referencia en una FOREIGN KEY restricción como la tabla con la clave primaria o única referenciada se eliminan en la misma DROP TABLE sentencia, primero debe listarse la tabla de 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 eliminas todas las filas de una tabla usando la DELETE sentencia o usas la TRUNCATE TABLE sentencia, la definición de la tabla existe hasta que se elimina usando DROP TABLE.

Si dejas caer una tabla que contiene una varbinary(max) columna con el FILESTREAM atributo, cualquier dato almacenado en el sistema de archivos no se elimina.

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). No se puede eliminar directamente una tabla de historial o una vista de libro mayor. El sistema aplica una semántica de eliminación suave al eliminar tablas del libro mayor y sus objetos dependientes: en realidad no se eliminan, sino que se marcan como descartados en las vistas del catálogo del sistema y se les renombra. Para más información, consulte el apartado Consideraciones y limitaciones del libro de contabilidad.

Importante

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

En la base de datos SQL de Fabric, eliminar una tabla la elimina tanto de la base de datos como de Fabric OneLake. Se eliminan todos los datos espejo de la tabla eliminada.

Asignación diferida

Cuando una tabla se elimina y la tabla o sus índices tienen 128 extensiones o más, el Motor de Base de Datos pospone las asignaciones reales de las páginas y sus bloqueos asociados hasta después de que la transacción se confirme. La tabla y los índices se eliminan en dos fases separadas: lógica y física. En la fase lógica, las unidades de asignación existentes se marcan para la desasignación y se bloquean hasta que la transacción se confirme. En la fase física, un proceso en segundo plano elimina las páginas marcadas para la desasignación. Esto significa que el espacio liberado por DROP TABLE podría no estar disponible para nuevas asignaciones de inmediato.

Si se habilita la recuperación acelerada de la base de datos , se utilizan las fases lógicas y físicas separadas independientemente del número de extensiones.

Permisos

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

Si la instrucción elimina una tabla del libro mayor, se requiere el ALTER LEDGER permiso.

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 AdventureWorks2025. 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

El siguiente ejemplo crea una tabla temporal, prueba su existencia, la elimina y vuelve a probar su existencia intentando ejecutar una SELECT sentencia, que falla. Este ejemplo no utiliza la IF EXISTS sintaxis que está disponible a partir de SQL Server 2016 (13.x).

CREATE TABLE #temptable (col1 int);

INSERT INTO #temptable
VALUES (10);

SELECT col1 FROM #temptable;

IF OBJECT_ID(N'tempdb..#temptable', N'U') IS NOT NULL
  DROP TABLE #temptable;

SELECT col1 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 la tabla ya está caída, sin embargo, no causa ningún error.

CREATE TABLE T1 (Col1 int);

DROP TABLE T1;

DROP TABLE IF EXISTS T1;