DROP TABLE (Transact-SQL)

Si applica a:SQL Server database SQL di Azure Istanza gestita di SQL di Azure Azure Synapse Analytics AnalyticsPlatform System (PDW)Warehouse in Microsoft Fabric

Rimuove una o più definizioni di tabella e tutti i dati, gli indici, i trigger, i vincoli e le specifiche di autorizzazione associate alle tabelle in questione. Le viste e stored procedure che fanno riferimento alla tabella eliminata devono essere eliminate in modo esplicito tramite l'istruzione DROP VIEW o DROP PROCEDURE. Per indicare le dipendenze da una tabella, usare sys.dm_sql_referencing_entities.

Convenzioni di sintassi Transact-SQL

Sintassi

-- 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 }
[;]  

Nota

Per visualizzare la sintassi Transact-SQL per SQL Server 2014 (12.x) e versioni precedenti, vedere la documentazione delle versioni precedenti.

Argomenti

database_name
Nome del database in cui è stata creata la tabella.

Il database SQL di Azure supporta il formato del nome in tre parti, nome_database.[nome_schema].nome_oggetto, quando nome_database è il database corrente oppure nome_database è tempdb e nome_oggetto inizia con #. Il database SQL di Azure non supporta i nomi composti da quattro parti.

IF EXISTS
Si applica a: SQL Server ( SQL Server 2016 (13.x) fino alla versione corrente).

Rimuove in modo condizionale la tabella solo se esiste già.

schema_name
Nome dello schema a cui appartiene la tabella.

table_name
Nome della tabella da rimuovere.

Osservazioni:

Non è possibile utilizzare l'istruzione DROP TABLE per eliminare una tabella a cui fa riferimento un vincolo FOREIGN KEY. È prima necessario eliminare il vincolo FOREIGN KEY o la tabella di riferimento. Se con la stessa istruzione DROP TABLE si eliminano sia la tabella di riferimento che la tabella che contiene la chiave primaria, è necessario indicare la tabella di riferimento per prima nell'elenco.

Si possono eliminare più tabelle in qualsiasi database. Se una tabella da eliminare fa riferimento alla chiave primaria di un'altra tabella, anch'essa da eliminare, è necessario indicare la tabella di riferimento con la chiave esterna prima della tabella contenente la chiave primaria a cui fa riferimento la prima tabella.

Con l'eliminazione di una tabella, le regole o i valori predefiniti della tabella vengono disassociati e i vincoli o trigger associati alla tabella vengono eliminati automaticamente. Se la tabella viene ricreata, è necessario associare nuovamente le regole e i valori predefiniti appropriati, ricreare eventuali trigger e aggiungere tutti i vincoli necessari.

Se si eliminano tutte le righe di una tabella con DELETE tablename oppure si esegue l'istruzione TRUNCATE TABLE, la tabella continua a esistere fino a quando non viene eliminata.

Le tabelle e gli indici di grandi dimensioni che utilizzano più di 128 extent vengono eliminati in due fasi distinte: logica e fisica. Nella fase logica, le unità di allocazione esistenti utilizzate dalla tabella vengono contrassegnate per la deallocazione e bloccate fino al completamento del commit della transazione. Nella fase fisica, le pagine IAM contrassegnate per la deallocazione vengono eliminate fisicamente in più batch.

Se si elimina una tabella che contiene una colonna VARBINARY (MAX) con l'attributo FILESTREAM, non verrà rimosso alcun dato archiviato nel file system.

Quando una tabella libro mastro viene eliminata, vengono eliminati anche gli oggetti dipendenti (la tabella di cronologia e la visualizzazione libro mastro). Una tabella di cronologia o una visualizzazione libro mastro non può essere eliminata direttamente. Il sistema applica una semantica di eliminazione temporanea quando si eliminano le tabelle libro mastro e gli oggetti dipendenti, che non vengono effettivamente eliminati, ma vengono contrassegnati come eliminati nelle viste del catalogo di sistema e rinominati. Per altre informazioni, vedere Considerazioni e limitazioni dei libri mastro.

Importante

DROP TABLE e CREATE TABLE non devono essere eseguiti nella stessa tabella nello stesso batch. In caso contrario, è possibile che si verifichi un errore imprevisto.

Autorizzazioni

È richiesta l'autorizzazione ALTER per lo schema a cui appartiene la tabella, l'autorizzazione CONTROL per la tabella o l'appartenenza al ruolo predefinito del database db_ddladmin .

Se l'istruzione elimina una tabella libro mastro, è necessaria l'autorizzazione ALTER LEDGER.

Esempi

R. Eliminazione di una tabella dal database corrente

Nell'esempio seguente vengono eliminati la tabella ProductVendor1 e i dati e gli indici corrispondenti dal database corrente.

DROP TABLE ProductVendor1 ;  

B. Eliminazione di una tabella da un database diverso da quello corrente

Nell'esempio seguente viene eliminata la tabella SalesPerson2 nel database AdventureWorks2022. È possibile eseguire questo esempio da qualsiasi database nell'istanza del server.

DROP TABLE AdventureWorks2022.dbo.SalesPerson2 ;  

C. Eliminazione di una tabella temporanea

Nell'esempio seguente viene creata una tabella temporanea, ne viene controllata l'esistenza, quindi la tabella viene eliminata e viene eseguito un ulteriore controllo dell'esistenza. Questo esempio non usa la sintassi IF EXISTS, disponibile a partire da 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. Eliminazione di una tabella usando IF EXISTS

Si applica a: SQL Server ( SQL Server 2016 (13.x) fino alla versione corrente).

Nell'esempio seguente viene creato un pool di risorse denominato T1. Quindi la seconda istruzione elimina la tabella. La terza istruzione non esegue alcuna azione perché la tabella è già stata eliminata, ma non produce un errore.

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

Vedi anche

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)