DROP TABLE (Transact-SQL)

Entfernt eine oder mehrere Tabellendefinitionen sowie alle Daten, Indizes, Trigger, Einschränkungen und Berechtigungen für diese Tabellen. Jede Sicht oder gespeicherte Prozedur, die auf die gelöschte Tabelle verweist, muss explizit mithilfe einer DROP VIEW- oder DROP PROCEDURE-Anweisung gelöscht werden. Um die Abhängigkeiten über eine Tabelle zu berichten, verwenden Sie sys.dm_sql_referencing_entities.

Syntax

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

Argumente

  • database_name
    Name der Datenbank, in der die Tabelle erstellt wurde

  • schema_name
    Name des Schemas, zu dem die Tabelle gehört

  • table_name
    Name der Tabelle, die entfernt werden soll

Hinweise

Die DROP TABLE-Anweisung kann nicht zum Löschen einer Tabelle verwendet werden, auf die mit einer FOREIGN KEY-Einschränkung verwiesen wird. Die verweisende FOREIGN KEY-Einschränkung oder die verweisende Tabelle muss zuerst gelöscht werden. Wenn sowohl die verweisende Tabelle als auch die Tabelle mit dem Primärschlüssel in derselben DROP TABLE-Anweisung gelöscht werden, muss die verweisende Tabelle zuerst aufgelistet werden.

Mehrere Tabellen können in jeder beliebigen Datenbank gelöscht werden. Verweist eine zu löschende Tabelle auf den Primärschlüssel einer anderen, ebenfalls zu löschenden Tabelle, muss die verweisende Tabelle mit dem Fremdschlüssel vor der Tabelle mit dem Primärschlüssel, auf den verwiesen wird, aufgelistet werden.

Wird eine Tabelle gelöscht, werden alle Bindungen von Regeln und Standardwerten zur Tabelle entfernt, und alle der Tabelle zugeordneten Einschränkungen und Trigger werden automatisch gelöscht. Wenn Sie die Tabelle neu erstellen, müssen Sie auch die entsprechenden Regeln und Standardwerte neu binden, die Trigger neu erstellen und alle erforderlichen Einschränkungen hinzufügen.

Wenn Sie alle Zeilen einer Tabelle löschen (DELETE tablename) oder die TRUNCATE TABLE-Anweisung verwenden, ist die Tabelle so lange vorhanden, bis sie gelöscht wird.

Umfangreiche Tabellen und Indizes mit mehr als 128 Blöcken werden in zwei getrennten Phasen gelöscht: in der logischen und in der physischen Phase. In der logischen Phase werden die von der Tabelle verwendeten vorhandenen Zuordnungseinheiten für die Aufhebung der Zuordnungen markiert und bis zum Commit der Transaktion gesperrt. In der physischen Phase werden die für die Zuordnungsaufhebung markierten IAM-Seiten in Batches physisch gelöscht. Weitere Informationen finden Sie unter Löschen und Neuerstellen großer Objekte.

Wenn Sie eine Tabelle löschen, die eine VARBINARY(MAX)-Spalte mit dem FILESTREAM-Attribut enthält, werden alle im Dateisystem gespeicherten Daten nicht entfernt.

Wichtiger HinweisWichtig

DROP TABLE und CREATE TABLE dürfen nicht in der gleichen Tabelle im gleichen Batch ausgeführt werden. Andernfalls tritt möglicherweise ein unerwarteter Fehler auf.

Berechtigungen

Erfordert die ALTER-Berechtigung für das Schema, zu dem die Tabelle gehört, die CONTROL-Berechtigung für die Tabelle oder die Mitgliedschaft in der festen Datenbankrolle db_ddladmin.

Beispiele

A. Löschen einer Tabelle in der aktuellen Datenbank

Im folgenden Beispiel werden die ProductVendor1-Tabelle, ihre Daten und ihre Indizes aus der aktuellen Datenbank entfernt.

DROP TABLE ProductVendor1 ;

B. Löschen einer Tabelle in einer anderen Datenbank

Im folgenden Beispiel wird die SalesPerson2-Tabelle in der AdventureWorks2008R2-Datenbank gelöscht. Das Beispiel kann aus jeder Datenbank auf der Serverinstanz heraus ausgeführt werden.

DROP TABLE AdventureWorks2008R2.dbo.SalesPerson2 ;

C. Löschen einer temporären Tabelle

Im folgenden Beispiel wird eine temporäre Tabelle erstellt, überprüft, ob sie vorhanden ist, die Tabelle gelöscht und erneut überprüft, ob sie vorhanden ist.

USE AdventureWorks2008R2;
GO
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;