DROP DATABASE (Transact-SQL)

Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

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

Convenciones de sintaxis de Transact-SQL

Sintaxis

Sintaxis de SQL Server.

DROP DATABASE [ IF EXISTS ] { database_name | database_snapshot_name } [ ,...n ]
[ ; ]

Sintaxis de Azure SQL Database, Azure Synapse Analytics y Analytics Platform System.

DROP DATABASE database_name
[ ; ]

Argumentos

IF EXISTS

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores

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_name

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

Comentarios

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

Una base de datos que se ha quitado solo puede volver a crearse si se restaura una copia de seguridad. No se puede realizar una copia de seguridad de las instantáneas de base de datos y, por lo tanto, no se puede 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 cualquiera de sus archivos, está sin conexión cuando se quita, los archivos de disco no se eliminan. Estos archivos se pueden eliminar manualmente mediante un administrador de archivos como Explorador de archivos. Para quitar una base de datos del servidor actual sin eliminar los archivos del sistema de archivos, use sp_detach_db.

Advertencia

En SQL Server 2016 (13.x) y versiones posteriores, quitar una base de datos que tenga FILE_SNAPSHOT copias de seguridad asociadas, pero los archivos de base de datos que tienen instantáneas asociadas no se eliminarán para evitar invalidar las copias de seguridad que hacen referencia a estos archivos de base de datos. El archivo se truncará, pero no se eliminará físicamente para mantener intactas las FILE_SNAPSHOT copias de seguridad. Para más información, consulte Copia de seguridad y restauración de SQL Server con Azure Blob Storage.

SQL Server

Al quitar una instantánea de base de datos, se elimina la instantánea de base de datos de una instancia de SQL Server y se eliminan los archivos dispersos del sistema de archivos NTFS físicos usados por la instantánea. Para obtener información sobre el uso de archivos dispersos por instantáneas de base de datos, vea Instantáneas de base de datos (SQL Server). Al quitar una instantánea de base de datos, se borran las entradas de la memoria caché del plan asociadas a la instantánea de base de datos, no la instancia en su conjunto. 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 en la memoria caché del plan, el registro de errores de SQL Server contiene el siguiente mensaje informativo. Este mensaje se registra cada cinco minutos siempre que se vacíe la memoria caché dentro de ese intervalo de tiempo.

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.

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 una base de datos está dañada o la replicación no se puede quitar primero (o ambas), en la mayoría de los casos puede quitar la base de datos mediante ALTER DATABASE para establecer la base de datos sin conexión y, a continuación, 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 más información, vea Acerca del trasvase de registros (SQL Server).

Limitaciones

No se pueden quitar las bases de datos del sistema.

La DROP DATABASE instrucción 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á usando actualmente. Esto significa que se mantienen bloqueos para la lectura o la escritura por parte de los usuarios. Una manera de quitar usuarios de la base de datos es usar ALTER DATABASE para establecer la base de datos en SINGLE_USER. En esta estrategia, debe ejecutar y ALTER DATABASE DROP DATABASE en el mismo lote para evitar que se permita otra conexión que reclama una sesión de usuario único. Para obtener más información, vea Ejemplo D.

SQL Server

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

Quitar una base de datos habilitada para Stretch Database no quita 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 master base de datos para quitar una base de datos.

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

Azure Synapse Analytics

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

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

Permisos

SQL Server

Requiere el CONTROL permiso en la base de datos, o ALTER ANY DATABASE el permiso, 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 CONTROL permiso en la base de datos, o ALTER ANY DATABASE el permiso, o la pertenencia al rol fijo de base de datos db_owner .

Ejemplos

A Quitar una base de datos única

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

DROP DATABASE Sales;

B. Quitar varias bases de datos

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

DROP DATABASE Sales, NewSales;

C. Quitar una instantánea de base de datos

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 AS 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;';
        EXECUTE (@SQL);
    END