Sdílet prostřednictvím


DROP TABLE (Transact-SQL)

Platí na:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytický platformový systém (PDW)Sklad v Microsoft Fabric

Odstraní jednu nebo více definic tabulek a všechna data, indexy, spouštěče, omezení a specifikace oprávnění pro tyto tabulky. Jakýkoli pohled nebo uložená procedura, která odkazuje na vypuštěnou tabulku, musí být explicitně odstraněna pomocí DROP VIEW nebo DROP PROCEDURE. Pro hlášení závislostí v tabulce použijte sys.dm_sql_referencing_entities.

Transact-SQL konvence syntaxe

Syntaxe

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

Arguments

database_name

Je název databáze, ve které byla tabulka vytvořena.

Azure SQL Database podporuje tříčlenný formát database_name.schema_name.object_name názvu, když database_name je aktuální databáze nebo database_name je tempdb a object_name začíná na # nebo ##. Azure SQL Database nepodporuje čtyřdílné názvy.

POKUD EXISTUJE

Platí na: SQL Server (SQL Server 2016 (13.x) až po současnou verzi).

Podmíněně ukončí tabuli pouze tehdy, pokud už existuje.

schema_name

Je název schématu, ke kterému tabulka patří.

table_name

Je název tabulky, která má být odstraněna.

Poznámky

DROP TABLE nelze použít k odstranění tabulky, na kterou se odkazuje nějaké omezení FOREIGN KEY . Nejprve musí být odstraněno FOREIGN KEY referenční omezení nebo referenční tabulka.

Ve stejném DROP TABLE příkazu lze vyřadit více tabulek. Pokud jsou v jednom DROP TABLE příkazu vyhazovány jak referenční tabulka v omezeníFOREIGN KEY, tak tabulka s odkazovaným primárním nebo jedinečným klíčem, musí být referenční tabulka uvedena jako první.

Když dojde k vyřazení tabulky, pravidla nebo výchozí nastavení tabulky ztratí vazbu a všechna omezení nebo triggery přidružené k tabulce se automaticky zahodí. Pokud znovu vytvoříte tabulku, musíte znovu vytvořit vazbu odpovídajících pravidel a výchozích hodnot, znovu vytvořit všechny triggery a přidat všechna požadovaná omezení.

Pokud smažete všechny řádky v tabulce pomocí DELETE příkazu nebo příkazu TRUNCATE TABLE , definice tabulky existuje, dokud není odstraněna pomocí DROP TABLE.

Pokud odstraníte tabulku obsahující sloupec varbinary(max) s atributem FILESTREAM , žádná data uložená v souborovém systému nejsou odstraněna.

Když je tabulka účetní knihy vyřazena, jsou také odstraněny její závislé objekty (historická tabulka a pohled v účetní účetní evidenci). Historická tabulka nebo pohled na účetní knihu nelze přímo vyřadit. Systém vynucuje soft-delete sémantiku při vyhazování ledger tabulek a jejich závislých objektů – ty nejsou ve skutečnosti vyhazovány, ale jsou označeny jako zapuštěné v systémových katalogových pohledech a přejmenovány. Pro více informací viz úvahy a omezení účetní knihy.

Důležité

DROP TABLE a CREATE TABLE nemělo by se provádět na stejném stole ve stejné dávce. V opačném případě může dojít k neočekávané chybě.

V databázi Fabric SQL se při vyhazování tabulky vyřadí jak z databáze, tak z Fabric OneLake. Všechna zrcadlená data pro vyřazenou tabuli jsou odstraněna.

Odložené oddělování

Když je tabulka vypuštěna a tabulka nebo její indexy mají 128 nebo více rozsahů, databázový engine odloží skutečné deallokace stránek a jejich přidružené zámky až po dokončení transakce. Tabulka a indexy jsou rozděleny do dvou samostatných fází: logické a fyzické. V logické fázi jsou stávající alokační jednotky označeny k dealokaci a uzamčeny, dokud transakce není schválena. Ve fyzické fázi proces na pozadí odstraní stránky označené pro deallocation. To znamená, že uvolněný prostor nemusí DROP TABLE být okamžitě k dispozici pro nové alokace.

Pokud je povolena zrychlená obnova databáze , používají se oddělené logické a fyzické fáze bez ohledu na počet rozsahů.

Povolení

Vyžaduje oprávnění ALTER ke schématu, ke kterému tabulka patří, CONTROL povolení k tabulce nebo členství v pevné databázové db_ddladmin roli.

Pokud výpis spadne do tabulky účetní knihy, je vyžadováno povolení ALTER LEDGER .

Examples

A. Ukládání tabulky do aktuální databáze

Následující příklad odstraní tabulku ProductVendor1 a její data a indexy z aktuální databáze.

DROP TABLE ProductVendor1;

B. Ukládání tabulky do jiné databáze

Následující příklad zahodí SalesPerson2 tabulku v AdventureWorks2025 databázi. Příklad lze spustit z jakékoli databáze na instanci serveru.

DROP TABLE AdventureWorks2022.dbo.SalesPerson2 ;

C. Zrušení dočasného stolu

Následující příklad vytváří dočasnou tabulku, testuje její existenci, zruší ji a znovu otestuje její existenci pokusem o vykonání příkazu SELECT , který však selže. Tento příklad nepoužívá syntaxi IF EXISTS , která je dostupná od 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. Upuštění tabulky pomocí IF EXISTS

Platí na: SQL Server (SQL Server 2016 (13.x) až po současnou verzi).

Následující příklad vytváří tabulku s názvem T1. Pak druhý výrok spadne na stůl. Třetí příkaz nevykoná žádnou akci, protože tabulka už byla odložena, ale nezpůsobuje chybu.

CREATE TABLE T1 (Col1 int);

DROP TABLE T1;

DROP TABLE IF EXISTS T1;