DROP DATABASE (Transact-SQL)

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Quita una o varias bases de datos de usuario o instantáneas de base de datos de una instancia de SQL Server.

Convenciones de sintaxis de Transact-SQL

Sintaxis

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

Nota:

Para ver la sintaxis de Transact-SQL para SQL Server 2014 (12.x) y versiones anteriores, consulte Versiones anteriores de la documentación.

Argumentos

IF EXISTS
Se aplica a: SQL Server (desde SQL Server 2016 (13.x) hasta la versión actual).

Quita la base de datos condicionalmente solo si ya existe.

database_name Especifica el nombre de la base de datos que se va a quitar. Para mostrar una lista de bases de datos, use la vista de catálogo sys.databases.

database_snapshot_nameSe aplica a: SQL Server 2008 (10.0.x) y versiones posteriores.

Especifica el nombre de la instantánea de base de datos que se va a quitar.

Notas generales

Una base de datos se puede quitar sea cual sea su estado (sin conexión, solo lectura, sospechosa, etc.). Para ver el estado actual de una base de datos, use la vista de catálogo sys.databases.

Una base de datos que se ha quitado solo puede volver a crearse si se restaura una copia de seguridad. No es posible realizar copias de seguridad de instantáneas de la base de datos, por lo que éstas no se pueden restaurar.

Cuando se quita una base de datos, debe realizarse una copia de seguridad de la base de datos maestra.

Al quitar una base de datos, se elimina la base de datos de una instancia de SQL Server, así como los archivos de disco físico que usa. Si la base de datos o alguno de sus archivos están sin conexión cuando se quita, no se eliminan los archivos de disco. Estos archivos se pueden eliminar manualmente en el Explorador de Windows. Para quitar una base de datos del servidor actual sin eliminar los archivos del sistema de archivos, use sp_detach_db.

Advertencia

La acción de quitar una base de datos que tenga asociadas copias de seguridad de FILE_SNAPSHOT se llevará a cabo correctamente, pero no se eliminarán los archivos de base de datos que tengan instantáneas asociadas para evitar que se invaliden las copias de seguridad que hagan referencia a dichos archivos de base de datos. El archivo se truncará, pero no se eliminará físicamente con el fin de mantener intactas las copias de seguridad de FILE_SNAPSHOT. Para más información, vea Copia de seguridad y restauración de SQL Server con Microsoft Azure Blob Storage. Se aplica a: de SQL Server 2016 (13.x) a la versión actual.

SQL Server

Cuando se quita una instantánea de base de datos, se elimina la instantánea de base de datos de una instancia de SQL Server, así como los archivos físicos dispersos del sistema de archivos NTFS que emplea. Para obtener más información sobre cómo las instantáneas de base de datos usan archivos dispersos, vea Instantáneas de base de datos. Al quitar una instantánea de la base de datos se borra la caché del plan para la instancia de SQL Server. Al borrar la memoria caché de planes, se provoca una nueva compilación de todos los planes de ejecución posteriores y puede ocasionar una disminución repentina y temporal del rendimiento de las consultas. Para cada almacén de caché borrado de la caché de planes, el registro de errores de SQL Server contendrá el siguiente mensaje informativo: "SQL Server ha detectado %d instancias de vaciado del almacén de caché "%s" (parte de la memoria caché de planes) debido a determinadas operaciones de mantenimiento de base de datos o reconfiguración". Este mensaje se registra cada cinco minutos siempre que se vacíe la memoria caché dentro de ese intervalo de tiempo.

Interoperabilidad

SQL Server

Para quitar una base de datos publicada para la replicación transaccional, o suscrita o publicada para la replicación de mezcla, primero es necesario quitar la replicación de la base de datos. Si se daña una base de datos o no se puede quitar la replicación primero, o ambas cosas, la mayoría de las veces todavía se puede quitar la base de datos utilizando ALTER DATABASE para definirla como sin conexión y, después, quitarla.

Si la base de datos participa en el trasvase de registros, quite el trasvase de registros antes de quitar la base de datos. Para obtener más información, consulte Acerca del trasvase de registros.

Limitaciones y restricciones

Las bases de datos del sistema no se pueden quitar.

La instrucción DROP DATABASE debe ejecutarse en modo de confirmación automática y no se permite en una transacción explícita o implícita. El modo de confirmación automática es el modo de administración de transacciones predeterminado.

Advertencia

No se puede quitar una base de datos que se está utilizando actualmente. Esto significa que se mantienen bloqueos para la lectura o la escritura por parte de los usuarios. Una manera para quitar usuarios de la base de datos consiste en usar ALTER DATABASE para establecer la base de datos en SINGLE_USER. Si sigue esta estrategia, debe ejecutar ALTER DATABASE y DROP DATABASE en el mismo lote, para evitar otra conexión que reclame que se permita una sesión de un solo usuario. Vea el ejemplo D más abajo.

SQL Server

Deben quitarse las instantáneas de una base de datos para poder quitar esa base de datos.

La acción de quitar una base de datos habilitada para Stretch Database no elimina los datos remotos. Si quiere eliminar los datos remotos, tendrá que hacerlo manualmente.

Importante

Stretch Database está en desuso en SQL Server 2022 (16.x) y Azure SQL Database. Esta característica se quitará en una versión futura del motor de base de datos. Evite utilizar esta característica en nuevos trabajos de desarrollo y tenga previsto modificar las aplicaciones que actualmente la utilizan.

Azure SQL Database

Debe estar conectado a la base de datos maestra para quitar una base de datos.

La instrucción DROP DATABASE debe ser la única instrucción en un lote SQL y solo puede quitar una base de datos cada vez.

Azure Synapse Analytics

Debe estar conectado a la base de datos maestra para quitar una base de datos.

La instrucción DROP DATABASE debe ser la única instrucción en un lote SQL y solo puede quitar una base de datos cada vez.

Permisos

SQL Server

Requiere el permiso CONTROL en la base de datos, el permiso ALTER ANY DATABASE o la pertenencia al rol fijo de base de datos db_owner.

Azure SQL Database

Solo el inicio de sesión principal de nivel de servidor (creado por el proceso de aprovisionamiento) o los miembros del rol de base de datos dbmanager pueden quitar una base de datos.

Sistema de la plataforma de análisis (PDW)

Requiere el permiso CONTROL en la base de datos, el permiso ALTER ANY DATABASE o la pertenencia al rol fijo de base de datos db_owner.

Ejemplos

A. Quitar una sola base de datos

En el ejemplo siguiente se quita la base de datos Sales.

DROP DATABASE Sales;

B. Quitar varias bases de datos

Se aplica a: SQL Server 2008 (10.0.x) y versiones posteriores.

En el ejemplo siguiente se quita cada una de las bases de datos enumeradas.

DROP DATABASE Sales, NewSales;

C. Quitar una instantánea de la base de datos

Se aplica a: SQL Server 2008 (10.0.x) y versiones posteriores.

En el ejemplo siguiente se quita una instantánea de base de datos, denominada sales_snapshot0600, sin que la base de datos de origen se vea afectada.

DROP DATABASE sales_snapshot0600;

D. Quitar una base de datos después de comprobar si existe

En el ejemplo siguiente se comprueba primero si existe una base de datos denominada Sales. En caso de que exista, en el ejemplo se cambia la base de datos denominada Sales al modo de usuario único para forzar la desconexión de todas las demás sesiones y, luego, se quita la base de datos. Para obtener más información sobre SINGLE_USER, consulte Opciones de 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;

Consulte también