Condividi tramite


TAVOLO DI CADUTA (Transact-SQL)

Si applica a: SQL Server database SQL di Azure Istanza gestita di SQL di Azure Azure Synapse Analytics Analytics Platform 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 relative alla 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 }
[;]

Argomenti

database_name

Nome del database in cui è stata creata la tabella.

Azure SQL Database supporta il formato database_name.schema_name.object_name del nome in tre parti quando database_name è il database corrente o database_name è tempdb e object_name inizia con # o ##. Azure SQL Database non supporta nomi a quattro parti.

SE ESISTE

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:

DROP TABLE Non può essere usato per eliminare una tabella che è referenziata da un FOREIGN KEY vincolo. Il vincolo di FOREIGN KEY riferimento o la tabella di riferimento devono essere eliminati per prima.

Più tabelle possono essere eliminate nella stessa DROP TABLE istruzione. Se sia la tabella di riferimento in un FOREIGN KEY vincolo sia la tabella con la chiave primaria o unica di riferimento vengono eliminate nella stessa DROP TABLE istruzione, la tabella di riferimento deve essere elencata prima.

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 elimini tutte le righe di una tabella usando l'istruzione DELETE o usi l'istruzione TRUNCATE TABLE , la definizione della tabella esiste finché non viene eliminata usando DROP TABLE.

Se lasci una tabella che contiene una varbinary(max) colonna con l'attributo FILESTREAM , qualsiasi dato memorizzato nel file system non viene rimosso.

Quando una tabella libro mastro viene eliminata, vengono eliminati anche gli oggetti dipendenti (la tabella di cronologia e la visualizzazione libro mastro). Una tabella della cronologia o una vista ledger non possono essere eliminate direttamente. Il sistema applica una semantica di cancellazione soft quando si rimuovono le tabelle del registro e i loro oggetti dipendenti – in realtà non vengono eliminati, ma vengono invece segnati come abbandonati nelle visualizzazioni del catalogo di sistema e rinominati. Per altre informazioni, vedere Considerazioni e limitazioni dei libri mastro.

Importante

DROP TABLE e CREATE TABLE non dovrebbe essere eseguito sulla stessa tabella nello stesso lotto. In caso contrario, è possibile che si verifichi un errore imprevisto.

Nel database SQL di Fabric, rilasciare una tabella la fa scartare sia dal database che da Fabric OneLake. Tutti i dati speculari per la tabella eliminata vengono rimossi.

Dislocazione differita

Quando una tabella viene eliminata e la tabella o i suoi indici hanno 128 estensioni o più, il Database Engine rimanda le effettive assegnazioni delle pagine e i loro blocchi associati fino a dopo che la transazione è stata effettuata. La tabella e gli indici vengono eliminati in due fasi separate: logica e fisica. Nella fase logica, le unità di allocazione esistenti vengono contrassegnate per la deallocazione e bloccate fino al commit della transazione. Nella fase fisica, un processo in background rimuove le pagine contrassegnate per la deallocazione. Ciò significa che lo spazio rilasciato da DROP TABLE potrebbe non essere disponibile immediatamente per le nuove allocazioni.

Se è abilitato il recupero accelerato del database , vengono utilizzate le fasi separate logica e fisica indipendentemente dal numero di estensioni.

Autorizzazioni

Richiede il ALTER permesso sullo schema a cui appartiene la tabella, CONTROL il permesso sulla tabella o l'appartenenza al db_ddladmin ruolo fisso del database.

Se l'istruzione lascia cadere una tabella del registro, è necessario il ALTER LEDGER permesso.

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 AdventureWorks2025. È possibile eseguire questo esempio da qualsiasi database nell'istanza del server.

DROP TABLE AdventureWorks2022.dbo.SalesPerson2 ;

C. Eliminazione di una tabella temporanea

Il seguente esempio crea una tabella temporanea, testa la sua esistenza, la elimina e ne verifica nuovamente tentando di eseguire un'istruzione SELECT , ma fallisce. Questo esempio non utilizza la IF EXISTS sintassi disponibile a partire da 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. 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 creata una tabella denominata T1. Quindi la seconda istruzione elimina la tabella. La terza istruzione non esegue alcuna azione perché la tabella è già stata abbandonata, tuttavia non causa errori.

CREATE TABLE T1 (Col1 int);

DROP TABLE T1;

DROP TABLE IF EXISTS T1;