DROP TABLE (Transact-SQL)
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, utilizzare sys.dm_sql_referencing_entities.
Si applica a: SQL Server (SQL Server 2008 tramite versione corrente), Database SQL di Windows Azure (versione iniziale tramite versione corrente). |
Convenzioni della sintassi Transact-SQL
Sintassi
DROP TABLE [ database_name . [ schema_name ] . | schema_name . ]
table_name [ ,...n ]
[ ; ]
Argomenti
database_name
Nome del database in cui è stata creata la tabella.Il database SQL di Windows 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 Windows Azure non supporta i nomi composti da quattro parti.
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.
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.
Esempi
A.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 AdventureWorks2012 . È possibile eseguire questo esempio da qualsiasi database nell'istanza del server.
DROP TABLE AdventureWorks2012.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.
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;