DROP TABLE (Transact-SQL)

Aplica-se a:SQL ServerAzureSQL DatabaseAzureSQL Managed InstanceAzureSynapse AnalyticsWarehousein Microsoft Fabric

Remove uma ou mais definições de tabela e todos os dados, índices, gatilhos, restrições e especificações de permissão dessas tabelas. Qualquer view ou procedimento armazenado que faça referência à tabela descartada deve ser explicitamente descartado usando DROP VIEW ou DROP PROCEDURE. Para relatar as dependências em uma tabela, use sys.dm_sql_referencing_entities.

Convenções de sintaxe de Transact-SQL

Sintaxe

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

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

Argumentos

database_name

É o nome do banco de dados no qual a tabela foi criada.

Banco de Dados SQL do Azure suporta o formato database_name.schema_name.object_name de nome em três partes quando database_name é o banco de dados atual ou database_name é tempdb e object_name começa com # ou ##. O Banco de Dados SQL do Azure não suporta nomes de quatro partes.

SE EXISTIR

Aplica-se a: SQL Server (SQL Server 2016 (13.x) até a versão atual).

Remove condicionalmente a tabela somente se ela já existe.

schema_name

É o nome do esquema ao qual a tabela pertence.

table_name

É o nome da tabela a ser removida.

Comentários

DROP TABLE não pode ser usado para eliminar uma tabela que é referenciada por uma FOREIGN KEY restrição. A restrição de FOREIGN KEY referência ou a tabela de referência devem ser descartadas primeiro.

Múltiplas tabelas podem ser descartadas na mesma DROP TABLE instrução. Se tanto a tabela de referência em uma FOREIGN KEY restrição quanto a tabela com a chave primária ou única referenciada estiverem sendo descartadas na mesma DROP TABLE instrução, a tabela de referência deve ser listada primeiro.

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

Se você excluir todas as linhas de uma tabela usando a DELETE instrução ou usar a TRUNCATE TABLE instrução, a definição da tabela existe até ser eliminada usando DROP TABLE.

Se você dropar uma tabela que contém uma varbinary(max) coluna com o FILESTREAM atributo, qualquer dado armazenado no sistema de arquivos não é removido.

Quando uma tabela do razão é removida, os objetos dependentes (a tabela de histórico e a exibição do razão) também são removidos. Uma tabela de histórico ou uma visualização de livro maior não pode ser descartada diretamente. O sistema impõe uma semântica de deleção suave ao eliminar tabelas de registro e seus objetos dependentes – eles não são realmente descartados, mas sim marcados como dropados nas visualizações do catálogo do sistema e renomeados. Para obter mais informações, confira Considerações e limitações do razão.

Importante

DROP TABLE CREATE TABLE e não deve ser executado na mesma tabela no mesmo lote. Caso contrário, poderá ocorrer um erro inesperado.

No banco de dados SQL Fabric, ao eliminar uma tabela ela é retirada tanto do banco de dados quanto do Fabric OneLake. Todos os dados espelhados da tabela descartada são removidos.

Realocação diferida

Quando uma tabela é descartada, e a tabela ou seus índices têm 128 extensões ou mais, o Mecanismo de Banco de Dados adia as reales alocações de páginas e seus bloqueios associados até que a transação seja comprometida. A tabela e os índices são descartados em duas fases separadas: lógica e física. Na fase lógica, as unidades de alocação existentes são marcadas para desalocação e travadas até que a transação seja confirmada. Na fase física, um processo em segundo plano remove as páginas marcadas para deslocação. Isso significa que o espaço liberado por DROP TABLE pode não estar disponível para novas alocações imediatamente.

Se a recuperação acelerada do banco de dados for habilitada, as fases lógicas e físicas separadas são usadas independentemente do número de extensões.

Permissões

Requer permissão ALTER sobre o esquema ao qual a tabela pertence, CONTROL permissão sobre a tabela ou pertencimento ao db_ddladmin papel fixo de banco de dados.

Se a instrução cair em uma tabela de livro-caixa, a ALTER LEDGER permissão é necessária.

Exemplos

a. Descartando uma tabela no banco de dados atual

O exemplo a seguir remove a tabela ProductVendor1 e seus dados e índices do banco de dados atual.

DROP TABLE ProductVendor1;

B. Descartando uma tabela em outro banco de dados

O exemplo a seguir descarta a tabela SalesPerson2 no banco de dados AdventureWorks2025. O exemplo pode ser executado a partir de qualquer banco de dados na instância do servidor.

DROP TABLE AdventureWorks2022.dbo.SalesPerson2 ;

C. Descartando uma tabela temporária

O exemplo a seguir cria uma tabela temporária, testa sua existência, a descarta e testa novamente sua existência tentando executar uma SELECT instrução, que falha. Este exemplo não usa a IF EXISTS sintaxe que está disponível a partir do 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. Descartando uma tabela usando IF EXISTS

Aplica-se a: SQL Server (SQL Server 2016 (13.x) até a versão atual).

O exemplo a seguir cria uma tabela chamada T1. Em seguida, a segunda instrução remove a tabela. A terceira instrução não realiza nenhuma ação porque a tabela já está descartada, porém não causa erro.

CREATE TABLE T1 (Col1 int);

DROP TABLE T1;

DROP TABLE IF EXISTS T1;