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

ESTE TÓPICO APLICA-SE A: simSQL Server (a partir de 2008)simBanco de Dados SQL do Microsoft AzuresimAzure SQL Data Warehouse simParallel Data Warehouse THIS TOPIC APPLIES TO: yesSQL Server (starting with 2008)yesAzure SQL DatabaseyesAzure SQL Data Warehouse yesParallel Data Warehouse

Remove uma ou mais definições de tabela e todos os dados, índices, gatilhos, restrições e especificações de permissão dessas tabelas.Removes one or more table definitions and all data, indexes, triggers, constraints, and permission specifications for those tables. Qualquer exibição ou procedimento armazenado que faça referência à tabela descartada deverá ser descartado explicitamente utilizando DROP VIEW ou DROP PROCEDURE.Any view or stored procedure that references the dropped table must be explicitly dropped by using DROP VIEW or DROP PROCEDURE. Para relatar as dependências em uma tabela, use sys.dm_sql_referencing_entities.To report the dependencies on a table, use sys.dm_sql_referencing_entities.

Ícone de link do tópico Convenções da sintaxe Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxeSyntax

-- Syntax for SQL Server and Azure SQL Database  

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

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

ArgumentosArguments

database_namedatabase_name
É o nome do banco de dados no qual a tabela foi criada.Is the name of the database in which the table was created.

O Banco de Dados SQL do Windows Azure oferece suporte ao formato de nome de três partes database_name.[schema_name].object_name quando o database_name é o banco de dados atual ou o database_name é tempdb e o object_name começa com #.Windows 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 #. O Banco de Dados SQL do Windows Azure não oferece suporte a nomes de quatro partes.Windows Azure SQL Database does not support four-part names.

IF EXISTSIF EXISTS
Aplica-se a: SQL ServerSQL Server ( SQL Server 2016 (13.x)SQL Server 2016 (13.x) até a versão atual).Applies to: SQL ServerSQL Server ( SQL Server 2016 (13.x)SQL Server 2016 (13.x) through current version).

Remove condicionalmente a tabela somente se ela já existe.Conditionally drops the table only if it already exists.

schema_nameschema_name
É o nome do esquema ao qual a tabela pertence.Is the name of the schema to which the table belongs.

table_nametable_name
É o nome da tabela a ser removida.Is the name of the table to be removed.

RemarksRemarks

DROP TABLE não pode ser usado para descartar uma tabela que é referenciada por uma restrição FOREIGN KEY.DROP TABLE cannot be used to drop a table that is referenced by a FOREIGN KEY constraint. A restrição FOREIGN KEY que faz referência ou a tabela de referência deve ser primeiramente descartada.The referencing FOREIGN KEY constraint or the referencing table must first be dropped. Se a tabela de referência e a tabela que contém a chave primária forem descartadas na mesma instrução DROP TABLE, a tabela de referência deverá ser listada em primeiro lugar.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.

Podem ser descartadas várias tabelas em qualquer banco de dados.Multiple tables can be dropped in any database. Se uma tabela que está sendo descartada fizer referência à chave primária de outra tabela que também está sendo descartada, a tabela de referência com a chave estrangeira deverá ser listada antes da tabela que contém a chave primária que está sendo referenciada.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.

Quando uma tabela for descartada, as regras ou os padrões da tabela perderão sua associação e quaisquer restrições ou gatilhos associados à tabela serão descartados automaticamente.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. Se você recriar uma tabela, deverá associar novamente as regras e padrões apropriados, recriar quaisquer gatilhos e adicionar todas as restrições necessárias.If you re-create a table, you must rebind the appropriate rules and defaults, re-create any triggers, and add all required constraints.

Se você excluir todas as linhas de uma tabela usando DELETE tablename ou usar a instrução TRUNCATE TABLE, a tabela existirá até que ela seja descartada.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.

Tabelas e índices grandes que usem mais de 128 extensões são descartados em duas fases separadas: a fase lógica e a física.Large tables and indexes that use more than 128 extents are dropped in two separate phases: logical and physical. Na fase lógica, as unidades de alocação existentes usadas pela tabela são marcadas para desalocação e bloqueadas até que a transação seja confirmada.In the logical phase, the existing allocation units used by the table are marked for deallocation and locked until the transaction commits. Na fase física, as páginas IAM marcadas para desalocação são descartadas fisicamente em lotes.In the physical phase, the IAM pages marked for deallocation are physically dropped in batches.

Se você descartar uma tabela que contém uma coluna VARBINARY(MAX) com o atributo FILESTREAM, os dados armazenados no sistema de arquivos não serão removidos.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 e CREATE TABLE não devem ser executados na mesma tabela no mesmo lote.DROP TABLE and CREATE TABLE should not be executed on the same table in the same batch. Caso contrário, poderá ocorrer um erro inesperado.Otherwise an unexpected error may occur.

PermissõesPermissions

Exige a permissão ALTER no esquema ao qual a tabela pertence, permissão CONTROL na tabela ou associação na função de banco de dados fixa 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.

ExemplosExamples

A.A. Descartando uma tabela no banco de dados atualDropping a table in the current database

O exemplo a seguir remove a tabela ProductVendor1 e seus dados e índices do banco de dados atual.The following example removes the ProductVendor1 table and its data and indexes from the current database.

DROP TABLE ProductVendor1 ;  

B.B. Descartando uma tabela em outro banco de dadosDropping a table in another database

O exemplo a seguir descarta a tabela SalesPerson2 no banco de dados AdventureWorks2012AdventureWorks2012.The following example drops the SalesPerson2 table in the AdventureWorks2012AdventureWorks2012 database. O exemplo pode ser executado a partir de qualquer banco de dados na instância do servidor.The example can be executed from any database on the server instance.

DROP TABLE AdventureWorks2012.dbo.SalesPerson2 ;  

C.C. Descartando uma tabela temporáriaDropping a temporary table

O exemplo a seguir cria uma tabela temporária, testa sua existência, descarta a mesma e testa novamente sua existência.The following example creates a temporary table, tests for its existence, drops it, and tests again for its existence. Este exemplo não usa a sintaxe IF EXISTS que está disponível com 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. Descartando uma tabela usando IF EXISTSDropping a table using IF EXISTS

Aplica-se a: SQL ServerSQL Server ( SQL Server 2016 (13.x)SQL Server 2016 (13.x) até a versão atual).Applies to: SQL ServerSQL Server ( SQL Server 2016 (13.x)SQL Server 2016 (13.x) through current version).

O exemplo a seguir cria uma tabela chamada T1.The following example creates a table named T1. Em seguida, a segunda instrução remove a tabela.Then the second statement drops the table. A terceira instrução não realiza nenhuma ação porque a tabela já foi excluída, porém, não causa um erro.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 TambémSee 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)