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 wurdeschema_name
Name des Schemas, zu dem die Tabelle gehörttable_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.
Wichtig |
---|
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 AdventureWorks-Datenbank gelöscht. Das Beispiel kann aus jeder Datenbank auf der Serverinstanz heraus ausgeführt werden.
DROP TABLE AdventureWorks.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 AdventureWorks;
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;
Siehe auch
Verweis
Konzepte
Änderungsverlauf
Aktualisierter Inhalt |
---|
Es wurde ein Hinweis darüber hinzugefügt, dass das Löschen und Erstellen in derselben Tabelle in einem einzelnen Batch nicht möglich ist. |