Freigeben über


DROP TABLE (Transact-SQL)

Gilt für: SQL Server Azure SQL-Datenbank Azure SQL verwaltete Instanz Azure Synapse Analytics Platform System (PDW)Warehouse in Microsoft Fabric

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. Verwenden Sie sys.dm_sql_referencing_entities, um über die Abhängigkeiten von einer Tabelle zu berichten.

Transact-SQL-Syntaxkonventionen

Syntax

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

Argumente

database_name

Name der Datenbank, in der die Tabelle erstellt wurde.

Azure SQL Database unterstützt das dreiteilige Namensformat, database_name.schema_name.object_name wenn database_name die aktuelle Datenbank oder database_name ist tempdb und object_name beginnt mit # oder ##. Azure SQL Database unterstützt keine vierteiligen Namen.

WENN EXISTIERT

Gilt für: SQL Server (SQL Server 2016 (13.x) bis zur aktuellen Version).

Löscht die Tabelle nur, wenn diese bereits vorhanden ist.

schema_name

Der Name des Schemas, zu dem die Tabelle gehört.

table_name

Name der Tabelle, die entfernt werden soll

Bemerkungen

DROP TABLE kann nicht verwendet werden, um eine Tabelle zu entfernen, die durch eine Einschränkung FOREIGN KEY referenziert ist. Die Referenzbedingung FOREIGN KEY oder die Referenztabelle muss zuerst weggelassen werden.

Mehrere Tabellen können in derselben DROP TABLE Anweisung eingefügt werden. Wenn sowohl die Referenztabelle in einer FOREIGN KEY Constraint als auch die Tabelle mit dem referenzierten primären oder eindeutigen Schlüssel in derselben DROP TABLE Anweisung fallen gelassen werden, muss zuerst die Referenztabelle aufgeführt 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 in einer Tabelle löschen, indem Sie die DELETE Anweisung verwenden oder die Anweisung TRUNCATE TABLE verwenden, existiert die Tabellendefinition, bis sie mit gelöscht wird DROP TABLE.

Wenn du eine Tabelle mit einer varbinary(max) Spalte mit dem Attribut FILESTREAM versenkst, werden alle im Dateisystem gespeicherten Daten nicht entfernt.

Wenn eine Ledgertabelle gelöscht wird, werden auch ihre abhängigen Objekte (die Verlaufstabelle und die Ledgersicht) gelöscht. Eine Verlaufstabelle oder eine Ledger-Ansicht kann nicht direkt entfernt werden. Das System erzwingt eine Soft-Delete-Semantik , wenn Ledger-Tabellen und ihre abhängigen Objekte fallen – sie werden nicht tatsächlich verworfen, sondern in Systemkatalogansichten als verworfen markiert und umbenannt. Weitere Informationen finden Sie unter Überlegungen zu Ledgers und Einschränkungen.

Wichtig

DROP TABLE und CREATE TABLE sollte nicht in derselben Tabelle im selben Batch ausgeführt werden. Andernfalls tritt möglicherweise ein unerwarteter Fehler auf.

In der Fabric-SQL-Datenbank wird eine Tabelle sowohl aus der Datenbank als auch aus Fabric OneLake entfernt. Alle gespiegelten Daten für die verworfene Tabelle werden entfernt.

Aufgeschobene Zuweisung

Wenn eine Tabelle verworfen wird und die Tabelle oder ihre Indizes 128 oder mehr Extents haben, verschiebt die Datenbank-Engine die tatsächlichen Seiten-Deallocations und deren zugehörige Sperren bis nach dem Transaktionscommit. Die Tabelle und die Indizes werden in zwei getrennten Phasen weggelassen: logisch und physikalisch. In der logischen Phase werden die bestehenden Zuteilungseinheiten für die Deallokation markiert und bis zum Ausführen der Transaktion gesperrt. In der physischen Phase entfernt ein Hintergrundprozess die für Deallocation markierten Seiten. Das bedeutet, dass der von ihr DROP TABLE freigegebene Platz möglicherweise nicht sofort für neue Zuteilungen verfügbar ist.

Wenn beschleunigte Datenbankwiederherstellung aktiviert ist, werden die getrennten logischen und physischen Phasen unabhängig von der Anzahl der Erweiterungen verwendet.

Berechtigungen

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

Wenn die Aussage eine Hauptbuchtabelle enthält, ist die Berechtigung ALTER LEDGER erforderlich.

Beispiele

A. Ablegen 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. Ablegen einer Tabelle in einer anderen Datenbank

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

DROP TABLE AdventureWorks2022.dbo.SalesPerson2 ;

C. Ablegen einer temporären Tabelle

Das folgende Beispiel erstellt eine temporäre Tabelle, prüft ihre Existenz, entfernt sie und prüft erneut auf ihre Existenz, indem versucht wird, eine SELECT Anweisung auszuführen, die jedoch fehlschlägt. Dieses Beispiel verwendet nicht die IF EXISTS Syntax, die ab SQL Server 2016 (13.x) verfügbar ist.

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: Löschen einer Tabelle mit IF EXISTS

Gilt für: SQL Server (SQL Server 2016 (13.x) bis zur aktuellen Version).

Im folgenden Beispiel wird eine Tabelle mit dem Namen T1 erstellt. Die zweite Anweisung legt dann die Tabelle ab. Die dritte Anweisung führt keine Aktion aus, da die Tabelle bereits verworfen wurde, verursacht jedoch keinen Fehler.

CREATE TABLE T1 (Col1 int);

DROP TABLE T1;

DROP TABLE IF EXISTS T1;