適用於:Microsoft Fabric 中的 SQL Server
Azure SQL 資料庫
Azure SQL 受控執行個體
Azure Synapse Analytics Analytics
Platform System (PDW) 倉儲
移除一個或多個資料表定義及這些資料表的所有資料、索引、觸發程序、條件約束和權限規格。 對於參考卸除之資料表的任何檢視或預存程序,您必須使用 DROP VIEW 或 DROP PROCEDURE 來明確卸除它們。 若要報告對資料表的相依性,請使用 sys.dm_sql_referencing_entities。
語法
-- 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_name ,tempdb且object_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 TABLE 且 CREATE 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;