DROP DATABASE (Transact-SQL)

Applies to: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

Removes one or more user databases or database snapshots from an instance of SQL Server.

Transact-SQL syntax conventions

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

Note

To view Transact-SQL syntax for SQL Server 2014 (12.x) and earlier versions, see Previous versions documentation.

Arguments

IF EXISTS
Applies to: SQL Server ( SQL Server 2016 (13.x) through current version).

Conditionally drops the database only if it already exists.

database_name Specifies the name of the database to be removed. To display a list of databases, use the sys.databases catalog view.

database_snapshot_name Applies to: SQL Server 2008 (10.0.x) and later.

Specifies the name of a database snapshot to be removed.

General Remarks

A database can be dropped regardless of its state: offline, read-only, suspect, and so on. To display the current state of a database, use the sys.databases catalog view.

A dropped database can be re-created only by restoring a backup. Database snapshots cannot be backed up and, therefore, cannot be restored.

When a database is dropped, the master database should be backed up.

Dropping a database deletes the database from an instance of SQL Server and deletes the physical disk files used by the database. If the database or any one of its files is offline when it is dropped, the disk files are not deleted. These files can be deleted manually by using Windows Explorer. To remove a database from the current server without deleting the files from the file system, use sp_detach_db.

Warning

Dropping a database that has FILE_SNAPSHOT backups associated with it will succeed, but the database files that have associated snapshots will not be deleted to avoid invalidating the backups referring to these database files. The file will be truncated, but will not be physically deleted in order to keep the FILE_SNAPSHOT backups intact. For more information, see SQL Server Backup and Restore with Microsoft Azure Blob Storage. Applies to: SQL Server 2016 (13.x) through current version.

SQL Server

Dropping a database snapshot deletes the database snapshot from an instance of SQL Server and deletes the physical NTFS File System sparse files used by the snapshot. For information about using sparse files by database snapshots, see Database Snapshots. Dropping a database snapshot clears the plan cache for the instance of SQL Server. Clearing the plan cache causes a recompilation of all subsequent execution plans and can cause a sudden, temporary decrease in query performance. For each cleared cachestore in the plan cache, the SQL Server error log contains the following informational message: " 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". This message is logged every five minutes as long as the cache is flushed within that time interval.

Interoperability

SQL Server

To drop a database published for transactional replication, or published or subscribed to merge replication, you must first remove replication from the database. If a database is damaged or replication cannot first be removed or both, in most cases you still can drop the database by using ALTER DATABASE to set the database offline and then dropping it.

If the database is involved in log shipping, remove log shipping before dropping the database. For more information, see About Log Shipping.

Limitations and Restrictions

System databases cannot be dropped.

The DROP DATABASE statement must run in autocommit mode and is not allowed in an explicit or implicit transaction. Autocommit mode is the default transaction management mode.

Warning

You cannot drop a database currently being used. This means locks being held for reading or writing by any user. One way to remove users from the database is to use ALTER DATABASE to set the database to SINGLE_USER. In this strategy, you should execute the ALTER DATABASE and DROP DATABASE in the same batch, to avoid another connection claiming single user session allowed. See Example D below.

SQL Server

Any database snapshots on a database must be dropped before the database can be dropped.

Dropping a database enable for Stretch Database does not remove the remote data. If you want to delete the remote data, you have to remove it manually.

Important

Stretch Database is deprecated in SQL Server 2022 (16.x) and Azure SQL Database. This feature will be removed in a future version of the Database Engine. Avoid using this feature in new development work, and plan to modify applications that currently use this feature.

Azure SQL Database

You must be connected to the master database to drop a database.

The DROP DATABASE statement must be the only statement in a SQL batch and you can drop only one database at a time.

Azure Synapse Analytics

You must be connected to the master database to drop a database.

The DROP DATABASE statement must be the only statement in a SQL batch and you can drop only one database at a time.

Permissions

SQL Server

Requires the CONTROL permission on the database, or ALTER ANY DATABASE permission, or membership in the db_owner fixed database role.

Azure SQL Database

Only the server-level principal login (created by the provisioning process) or members of the dbmanager database role can drop a database.

Analytics Platform System (PDW)

Requires the CONTROL permission on the database, or ALTER ANY DATABASE permission, or membership in the db_owner fixed database role.

Examples

A. Dropping a single database

The following example removes the Sales database.

DROP DATABASE Sales;

B. Dropping multiple databases

Applies to: SQL Server 2008 (10.0.x) and later.

The following example removes each of the listed databases.

DROP DATABASE Sales, NewSales;

C. Dropping a database snapshot

Applies to: SQL Server 2008 (10.0.x) and later.

The following example removes a database snapshot, named sales_snapshot0600, without affecting the source database.

DROP DATABASE sales_snapshot0600;

D. Dropping a database after checking if it exists

The following example first checks to see if a database named Sales exists. If so, the example changes the database named Sales to single-user mode to force disconnect of all other sessions, then drops the database. For more information on SINGLE_USER, see ALTER DATABASE SET options.

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;

See Also