DROP DATABASE (Transact-SQL)

適用範圍: 是SQL Server (所有支援的版本) 是Azure SQL Database 是Azure SQL 受控執行個體 是Azure Synapse Analytics 是平行處理資料倉儲

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

主題連結圖示 Transact-SQL 語法慣例

語法

-- 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 與更早版本的 Transact-SQL 語法,請參閱舊版文件

引數

IF EXISTS
適用於:SQL Server (SQL Server 2016 (13.x) 至 目前版本)。

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

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

database_snapshot_name 適用於:SQL Server 2008 及更新版本。

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

一般備註

無論資料庫的狀態為離線、唯讀或受到質疑等,都可以卸除該資料庫。 若要顯示資料庫的目前狀態,請使用 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 的 '%s' 快取存放區 (計畫快取的一部分) 發生 %d 次快取存放區排清」。 只要在該時間間隔內快取發生排清,這個訊息就會每五分鐘記錄一次。

互通性

SQL Server

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

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

限制事項

無法卸除系統資料庫

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

警告

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

SQL Server

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

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

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 及更新版本。

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

DROP DATABASE Sales, NewSales;

C. 卸除資料庫快照集

適用對象:SQL Server 2008 及更新版本。

下列範例會移除名為 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;

另請參閱