共用方式為


掉落桌(Transact-SQL)

適用於:Microsoft Fabric 中的 SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics Analytics Platform System (PDW) 倉儲

移除一個或多個資料表定義及這些資料表的所有資料、索引、觸發程序、條件約束和權限規格。 對於參考卸除之資料表的任何檢視或預存程序,您必須使用 DROP VIEWDROP PROCEDURE 來明確卸除它們。 若要報告對資料表的相依性,請使用 sys.dm_sql_referencing_entities

Transact-SQL 語法慣例

語法

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

引數

database_name

這是建立資料表的資料庫名稱。

Azure SQL 資料庫支援三部分名稱格式,當 database_name 是目前資料庫 或 database_nametempdbobject_name以 或 ##開頭時#database_name.schema_name.object_name Azure SQL 資料庫不支援四部分名稱。

如果存在

適用於:SQL Server (SQL Server 2016 (13.x) 到最新版本)。

只有在資料表已存在時,才能有條件的將其卸除。

schema_name

這是資料表所屬的結構描述名稱。

table_name

這是要移除的資料表名稱。

備註

DROP TABLE 不能用來丟棄被限制所參考 FOREIGN KEY 的資料表。 必須先捨棄參照 FOREIGN KEY 約束或參照表。

同一 DROP TABLE 語句中可以丟棄多個資料表。 如果限制中的 FOREIGN KEY 引用表與包含參考主鍵或唯一鍵的表在同一語句中 DROP TABLE 同時被刪除,則必須先列出引用表。

當卸除資料表時,資料表的規則或預設值會失去它們的繫結,資料表的任何相關條件約束或觸發程序也都會自動卸除。 如果重新建立資料表,您必須重新繫結適當的規則和預設值、重新建立任何觸發程序,以及加入所有必要的條件約束。

如果你用 陳述 DELETE 句刪除表格中的所有列,或使用 陳述 TRUNCATE TABLE 句,表格定義會一直存在,直到被丟棄為 DROP TABLE止。

如果你丟棄包含 varbinary(max) 屬性 FILESTREAM 欄位的資料表,檔案系統中儲存的資料不會被移除。

卸除總帳資料表時,也會卸除其相依物件 (歷程記錄資料表和總帳檢視)。 歷史表或帳本視圖無法直接丟棄。 系統在刪除帳本資料表及其相關物件時會強制執行 軟刪除 語意——這些物件並非實際丟棄,而是在系統目錄檢視中標記為已刪除並重新命名。 如需詳細資訊,請參閱總帳考量與限制

重要

DROP TABLECREATE TABLE 不應該在同一批次的同一張資料表上執行。 否則,系統可能會發生非預期的錯誤。

在 Fabric SQL 資料庫中,丟棄資料表會同時從資料庫和 Fabric OneLake 中移除。 刪除資料表的所有鏡像資料都會被移除。

延遲分配

當資料表被丟棄,且該資料表或其索引有 128 個或以上的區段時,資料庫引擎會延後實際的頁面釋放及相關鎖,直到交易提交後才執行。 表格和索引會分兩個階段被丟棄:邏輯階段和物理階段。 在邏輯階段,現有配置單元會被標記為釋放對象並鎖定,直到交易提交。 在實體階段,背景程序會移除標記為釋放的頁面。 這表示所 DROP TABLE 釋放的空間可能無法立即提供新分配。

若啟用 加速資料庫復原 ,則不論區間數,都會使用獨立的邏輯與物理階段。

權限

需要在該資料表所屬的結構上取得 ALTER 權限、 CONTROL 對該資料表的權限,或是固定資料庫角色的成員資格 db_ddladmin

如果該語句丟棄了帳本資料表,則需要該 ALTER LEDGER 權限。

範例

A. 卸除目前資料庫中的資料表

下列範例會從目前資料庫移除 ProductVendor1 資料表及其資料和索引。

DROP TABLE ProductVendor1;

B. 卸除另一個資料庫中的資料表

下列範例會卸除 SalesPerson2 資料庫中的 AdventureWorks2025 資料表。 您可以從伺服器執行個體的任何資料庫中執行這個範例。

DROP TABLE AdventureWorks2022.dbo.SalesPerson2 ;

C. 卸除暫存資料表

以下範例建立一個暫存資料表,測試其存在性,丟棄它,然後嘗試執行 SELECT 一個語句,但該陳述句失敗,再測試其存在性。 這個範例沒有使用 IF EXISTS 從 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. 使用 IF EXISTS 來卸除資料表

適用於:SQL Server (SQL Server 2016 (13.x) 到最新版本)。

下列範例會建立名為的 T1數據表。 然後,第二個陳述式會卸除資料表。 第三個陳述句沒有執行任何動作,因為資料表已經被丟棄,但不會造成錯誤。

CREATE TABLE T1 (Col1 int);

DROP TABLE T1;

DROP TABLE IF EXISTS T1;