DROP DATABASE (Transact-SQL)

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體Azure Synapse AnalyticsAnalytics Platform System (PDW)

可從一個 SQL Server 執行個體,移除一個或多個使用者資料庫或資料庫快照集。

Transact-SQL 語法慣例

Syntax

-- SQL Server Syntax
DROP DATABASE [ IF EXISTS ] { database_name | database_snapshot_name } [ ,...n ] [;]
-- Azure SQL Database, Azure Synapse Analytics and Analytics Platform System Syntax
DROP DATABASE database_name [;]

注意

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

引數

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

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

database_name 指定要移除的資料庫名稱。 若要顯示資料庫清單,請使用 sys.databases 目錄檢視。

database_snapshot_name適用於:SQL Server 2008 (10.0.x) 和更新版本。

這是要移除的資料庫快照集名稱。

一般備註

無論資料庫的狀態為離線、唯讀或受到質疑等,都可以卸除該資料庫。 若要顯示資料庫的目前狀態,請使用 sys.databases 目錄檢視。

若要重新建立已經卸除的資料庫,只有還原備份一途。 資料庫快照集無法備份,因此也無法還原。

在卸除資料庫時,應該備份 master 資料庫

卸除資料庫時,不但會從 SQL Server 執行個體中刪除該資料庫,同時也會刪除該資料庫所用的實體磁碟檔。 如果資料庫或其任何一個檔案在卸除時離線,磁碟檔就不會被刪除。 這些檔案可以利用 [Windows 檔案總管],以手動方式刪除。 若要從目前伺服器中移除資料庫,而不刪除檔案系統中的檔案,請使用 sp_detach_db

警告

卸除具有與其建立關聯之 FILE_SNAPSHOT 備份的資料庫會成功,但不會刪除具有相關聯快照集的資料庫檔案,以避免參考這些資料庫檔案的備份不正確。 檔案將會被截斷,但實體不會被刪除,以保存完整的 FILE_SNAPSHOT 備份。 如需詳細資訊,請參閱 SQL Server 備份及還原與 Microsoft Azure Blob 儲存體適用於:SQL Server 2016 (13.x) 到最新版本

SQL Server

卸除資料庫快照集時,系統會從 SQL Server 執行個體刪除資料庫快照集,並刪除快照集所使用的實體 NTFS 檔案系統疏鬆檔案。 如需資料庫快照集使用疏鬆檔案的資訊,請參閱資料庫快照集。 卸除資料庫快照集會清除 SQL Server 執行個體的計畫快取。 清除計畫快取會導致重新編譯所有後續執行計畫,而且可能會導致查詢效能突然暫時下降。 針對計畫快取中每個清除的快取存放區,SQL Server 錯誤記錄檔會包含下列資訊訊息:「SQL Server has encountered %d occurrence(s) of cachestore flush for the '%s' cachestore (part of plan cache) due to some database maintenance or reconfigure operations」。 只要在該時間間隔內快取發生排清,這個訊息就會每五分鐘記錄一次。

互通性

SQL Server

若要卸除針對異動複寫而發行的資料庫,或是針對合併式複寫而發行或訂閱的資料庫,必須先從該資料庫移除複寫。 如果資料庫損毀,或者無法先移除複寫,或者兩種情況都有,多半還是能夠卸除資料庫,方法是利用 ALTER DATABASE,將資料庫設為離線,然後再卸除它。

如果資料庫有涉及記錄傳送,請在卸除資料庫之前移除記錄傳送。 如需詳細資訊,請參閱 關於記錄傳送

限制事項

無法卸除系統資料庫

DROP DATABASE 陳述式必須執行自動認可模式,且不能在明確或隱含的交易中。 自動認可模式是預設的交易管理模式。

警告

您無法卸除目前正在使用的資料庫。 這表示鎖定會保留,以便任何使用者讀取或寫入。 從資料庫移除使用者的一種方法是使用 ALTER DATABASE 將資料庫設為 SINGLE_USER。 在此策略中,您應該在相同批次中執行 ALTER DATABASE 和 DROP DATABASE,以避免允許另一個連線宣告單一使用者工作階段。 請參閱下方範例 D

SQL Server

在卸除資料庫之前,必須先卸除該資料庫上的任何資料庫快照集。

卸除針對 Stretch Database 所啟用的資料庫,並不會移除遠端資料。 如果您想要刪除遠端資料,則必須手動將它移除。

重要

Stretch Database 在 SQL Server 2022 (16.x) 和 Azure SQL 資料庫 中已被取代。 此功能將會在未來版本的 資料庫引擎 中移除。 請避免在新的開發工作中使用這項功能,並規劃修改目前使用這項功能的應用程式。

Azure SQL Database

您必須連接至 master 資料庫,才能卸除資料庫。

DROP DATABASE 陳述式必須是 SQL 批次中的唯一陳述式,而且您一次只能卸除一個資料庫。

Azure Synapse Analytics

您必須連接至 master 資料庫,才能卸除資料庫。

DROP DATABASE 陳述式必須是 SQL 批次中的唯一陳述式,而且您一次只能卸除一個資料庫。

權限

SQL Server

需要資料庫的 CONTROL 權限,或是 ALTER ANY DATABASE 權限,或 db_owner 固定資料庫角色的成員資格。

Azure SQL Database

只有伺服器層級主體登入 (由佈建程序所建立) 或 dbmanager 資料庫角色成員才能卸除資料庫。

Analytics Platform System (PDW)

需要資料庫的 CONTROL 權限,或是 ALTER ANY DATABASE 權限,或 db_owner 固定資料庫角色的成員資格。

範例

A. 卸除單一資料庫

下列範例會移除 Sales 資料庫。

DROP DATABASE Sales;

B. 卸除多個資料庫

適用於:SQL Server 2008 (10.0.x) 和更新版本。

下列範例會移除每一個列出的資料庫。

DROP DATABASE Sales, NewSales;

C. 卸除資料庫快照集

適用於:SQL Server 2008 (10.0.x) 和更新版本。

下列範例會移除名為 sales_snapshot0600 的資料庫快照集,而不會影響來源資料庫。

DROP DATABASE sales_snapshot0600;

D. 檢查資料庫是否存在之後卸除資料庫

下列範例會先檢查是否有名為 Sales 的資料庫存在。 如果是的話,此範例會將名為 Sales 的資料庫變更為單一使用者模式,以強制中斷所有其他工作階段的連線,然後卸除資料庫。 如需關於 SINGLE_USER 的詳細資訊,請參閱 ALTER DATABASE SET 選項

USE tempdb;
GO
DECLARE @SQL nvarchar(1000);
IF EXISTS (SELECT 1 FROM sys.databases WHERE [name] = N'Sales')
BEGIN
    SET @SQL = N'USE [Sales];

                 ALTER DATABASE Sales SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
                 USE [tempdb];

                 DROP DATABASE Sales;';
    EXEC (@SQL);
END;

另請參閱