DROP TABLE (Transact-SQL)

適用於:Microsoft Fabric 中的 SQL ServerAzure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics AnalyticsPlatform System (PDW)Warehouse

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

Transact-SQL 語法慣例

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

注意

若要檢視 SQL Server 2014 (12.x) 和舊版的 Transact-SQL 語法,請參閱 舊版檔

引數

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

當 database_name 是目前的資料庫或 database_name 是 tempdb,而且 object_name 開頭為 # 時,Azure SQL Database 支援三部分名稱格式 database_name.[schema_name].object_name。 Azure SQL Database 不支援四部分名稱。

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

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

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

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

備註

您無法利用 DROP TABLE 來卸除 FOREIGN KEY 條件約束所參考的資料表。 您必須先卸除參考 FOREIGN KEY 條件約束或參考資料表。 如果參考資料表和持有要卸除的主索引鍵之資料表在相同的 DROP TABLE 陳述式中,就必須先列出參考資料表。

您可以在任何資料庫中卸除多份資料表。 如果卸除的資料表參考另一份也要卸除的資料表之主索引鍵,含有外部索引鍵的參考資料表必須列在持有被參考的主索引鍵之資料表前面。

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

如果您使用 DELETE table_name 或 TRUNCATE TABLE 陳述式來刪除資料表中的所有資料列,資料表會持續存在,直到將它卸除為止。

使用超出 128 個範圍的大型資料表和索引會分成邏輯和實體這兩個分開的階段來卸除。 在邏輯階段中,資料表所用的現有配置單位會標示成取消配置和鎖定,直到認可交易為止。 在實體階段中,會以批次方式來實際卸除標示成取消配置的 IAM 頁面。

如果卸除的資料表包含具有 FILESTREAM 屬性的 VARBINARY(MAX) 資料行,則儲存在檔案系統中的任何資料都不會遭到移除。

卸除總帳資料表時,也會卸除其相依物件 (歷程記錄資料表和總帳檢視)。 無法直接卸除歷程記錄資料表或總帳檢視。 當卸除總帳資料表及其相依物件時,系統會強制執行虛刪除 語意 - 不會真正卸除,而是標示為在系統類別目錄檢視中卸除並重新命名。 如需詳細資訊,請參閱總帳考量與限制

重要

DROP TABLE 和 CREATE TABLE 不得在相同批次的相同資料表上執行。 否則,系統可能會發生非預期的錯誤。

權限

需要資料表所屬結構描述的 ALTER 權限、資料表的 CONTROL 權限,或 db_ddladmin 固定資料庫角色成員資格。

如果陳述式卸除總帳資料表,則需要 ALTER LEDGER 權限。

範例

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

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

DROP TABLE ProductVendor1 ;  

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

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

DROP TABLE AdventureWorks2022.dbo.SalesPerson2 ;  

C. 卸除暫存資料表

下列範例會建立一份暫存資料表、測試它是否存在、卸除它,再重新測試它是否存在。 此範例不使用 IF EXISTS 語法,其從 SQL Server 2016 (13.x) 開始可供使用。

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;  

D. 使用 IF EXISTS 來卸除資料表

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

下列範例會建立名稱為 T1 的資料表。 然後,第二個陳述式會卸除資料表。 第三個陳述式不會執行任何動作,因為資料表已刪除;但它不會造成錯誤。

CREATE TABLE T1 (Col1 INT);  
GO  
DROP TABLE IF EXISTS T1;  
GO  
DROP TABLE IF EXISTS T1;  

另請參閱

ALTER TABLE (Transact-SQL)
CREATE TABLE (Transact-SQL)
DELETE (Transact-SQL)
sp_help (Transact-SQL)
sp_spaceused (Transact-SQL)
TRUNCATE TABLE (Transact-SQL)
DROP VIEW (Transact-SQL)
DROP PROCEDURE (Transact-SQL)
EVENTDATA (Transact-SQL)
sys.sql_expression_dependencies (Transact-SQL)