DROP TABLE (Transact-SQL)DROP TABLE (Transact-SQL)

SE APLICA A: síSQL Server síAzure SQL Database síAzure Synapse Analytics (SQL DW) síAlmacenamiento de datos paralelos APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure Synapse Analytics (SQL DW) yesParallel Data Warehouse

Quita una o varias definiciones de tabla y todos los datos, índices, desencadenadores, restricciones y especificaciones de permisos de esas tablas.Removes one or more table definitions and all data, indexes, triggers, constraints, and permission specifications for those tables. Las vistas o procedimientos almacenados que hagan referencia a la tabla quitada se deben quitar explícitamente con DROP VIEW o DROP PROCEDURE.Any view or stored procedure that references the dropped table must be explicitly dropped by using DROP VIEW or DROP PROCEDURE. Para crear informes de las dependencias de una tabla, utilice sys.dm_sql_referencing_entities.To report the dependencies on a table, use sys.dm_sql_referencing_entities.

Icono de vínculo de tema Convenciones de sintaxis de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxisSyntax

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

ArgumentosArguments

database_namedatabase_name
Es el nombre de la base de datos en la que se creó la tabla.Is the name of the database in which the table was created.

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 supports the three-part name format database_name.[schema_name].object_name when the database_name is the current database or the database_name is tempdb and the object_name starts with #. Azure SQL Database no admite nombres de cuatro partes.Azure SQL Database does not support four-part names.

IF EXISTSIF EXISTS
Se aplica a: SQL ServerSQL Server (desde SQL Server 2016 (13.x)SQL Server 2016 (13.x) hasta la versión actual).Applies to: SQL ServerSQL Server ( SQL Server 2016 (13.x)SQL Server 2016 (13.x) through current version).

Quita la tabla condicionalmente solo si ya existe.Conditionally drops the table only if it already exists.

schema_nameschema_name
Es el nombre del esquema al que pertenece la tabla.Is the name of the schema to which the table belongs.

table_nametable_name
Es el nombre de la tabla que se va a quitar.Is the name of the table to be removed.

ObservacionesRemarks

No se puede utilizar DROP TABLE para quitar una tabla a la que haga referencia una restricción FOREIGN KEY.DROP TABLE cannot be used to drop a table that is referenced by a FOREIGN KEY constraint. Primero se debe quitar la restricción FOREIGN KEY o la tabla de referencia.The referencing FOREIGN KEY constraint or the referencing table must first be dropped. 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.If both the referencing table and the table that holds the primary key are being dropped in the same DROP TABLE statement, the referencing table must be listed first.

Se pueden quitar varias tablas de cualquier base de datos.Multiple tables can be dropped in any database. 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.If a table being dropped references the primary key of another table that is also being dropped, the referencing table with the foreign key must be listed before the table holding the primary key that is being referenced.

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.When a table is dropped, rules or defaults on the table lose their binding, and any constraints or triggers associated with the table are automatically dropped. 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.If you re-create a table, you must rebind the appropriate rules and defaults, re-create any triggers, and add all required constraints.

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.If you delete all rows in a table by using DELETE tablename or use the TRUNCATE TABLE statement, the table exists until it is dropped.

Los índices y las tablas grandes que utilizan más de 128 extensiones se quitan en dos fases independientes: lógica y física.Large tables and indexes that use more than 128 extents are dropped in two separate phases: logical and physical. 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.In the logical phase, the existing allocation units used by the table are marked for deallocation and locked until the transaction commits. En la fase física, las páginas IAM marcadas para cancelación de asignación se quitan físicamente por lotes.In the physical phase, the IAM pages marked for deallocation are physically dropped in batches.

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.If you drop a table that contains a VARBINARY(MAX) column with the FILESTREAM attribute, any data stored in the file system will not be removed.

Importante

DROP TABLE y CREATE TABLE no se deberían ejecutar en la misma tabla en el mismo lote.DROP TABLE and CREATE TABLE should not be executed on the same table in the same batch. De lo contrario, podría producirse un error inesperado.Otherwise an unexpected error may occur.

PermisosPermissions

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 .Requires ALTER permission on the schema to which the table belongs, CONTROL permission on the table, or membership in the db_ddladmin fixed database role.

EjemplosExamples

A.A. Quitar una tabla de la base de datos actualDropping a table in the current database

En el siguiente ejemplo se quita la tabla ProductVendor1, y sus datos e índices de la base de datos actual.The following example removes the ProductVendor1 table and its data and indexes from the current database.

DROP TABLE ProductVendor1 ;  

B.B. Quitar una tabla de otra base de datosDropping a table in another database

En el siguiente ejemplo se quita la tabla SalesPerson2 de la base de datos AdventureWorks2012AdventureWorks2012.The following example drops the SalesPerson2 table in the AdventureWorks2012AdventureWorks2012 database. El ejemplo se puede ejecutar desde cualquier base de datos de la instancia de servidor.The example can be executed from any database on the server instance.

DROP TABLE AdventureWorks2012.dbo.SalesPerson2 ;  

C.C. Quitar una tabla temporalDropping a temporary table

En el siguiente ejemplo se crea una tabla temporal, se comprueba si existe, se quita y se comprueba de nuevo si existe.The following example creates a temporary table, tests for its existence, drops it, and tests again for its existence. En este ejemplo no se utiliza la sintaxis IF EXISTS, que está disponible a partir de SQL Server 2016 (13.x)SQL Server 2016 (13.x).This example does not use the IF EXISTS syntax which is available beginning with SQL Server 2016 (13.x)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.D. Quitar una tabla con IF EXISTSDropping a table using IF EXISTS

Se aplica a: SQL ServerSQL Server (desde SQL Server 2016 (13.x)SQL Server 2016 (13.x) hasta la versión actual).Applies to: SQL ServerSQL Server ( SQL Server 2016 (13.x)SQL Server 2016 (13.x) through current version).

En el ejemplo siguiente se crea una tabla denominada T1.The following example creates a table named T1. A continuación, la segunda instrucción quita la tabla.Then the second statement drops the table. La tercera instrucción no realiza ninguna acción porque ya se ha eliminado la tabla, pero tampoco provoca ningún error.The third statement performs no action because the table is already deleted, however it does not cause an error.

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

Consulte tambiénSee Also

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