DROP DATABASE (Transact-SQL)

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Supprime un ou plusieurs bases de données utilisateur ou instantanés de base de données à partir d'une instance de SQL Server.

Conventions de la syntaxe Transact-SQL

Syntaxe

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

Remarque

Pour afficher la syntaxe Transact-SQL pour SQL Server 2014 (12.x) et versions antérieures, consultez la Documentation sur les versions antérieures.

Arguments

IF EXISTS
S’applique à: SQL Server (de SQL Server 2016 (13.x) à la version actuelle).

Supprime, de manière conditionnelle, la base de données uniquement si elle existe déjà.

database_name Spécifie le nom de la base de données à supprimer. Pour afficher une liste de bases de données, utilisez la vue de catalogue sys.databases.

database_snapshot_nameS’applique à : SQL Server 2008 (10.0.x) et versions ultérieures.

Spécifie le nom d'un instantané de base de données à supprimer.

Remarques d'ordre général

Une base de données peut être supprimée quel que soit son statut : hors connexion, en lecture seule, suspect, etc. Pour afficher l’état actuel d’une base de données, utilisez la vue de catalogue sys.databases.

Une base de données supprimée ne peut être recréée que par la restauration d'une copie de sauvegarde. Les instantanés de base de données ne peuvent pas être sauvegardés et ne peuvent donc pas être restaurés.

Quand vous supprimez une base de données, vous devez effectuer une sauvegarde de la base de données MASTER.

Si vous supprimez une base de données, celle-ci l'est également d'une instance de SQL Server. Il en est de même pour les fichiers disque physiques utilisés par la base de données. Si la base de données ou l'un de ses fichiers est hors connexion lors de la suppression, les fichiers disque ne sont pas supprimés. Ces fichiers peuvent être supprimés manuellement à l'aide de l'Explorateur Windows. Pour supprimer une base de données du serveur actif sans supprimer les fichiers du système de fichiers, utilisez sp_detach_db.

Avertissement

Vous pouvez supprimer une base de données qui est associée à des sauvegardes FILE_SNAPSHOT, mais les fichiers de base de données qui sont associés à des instantanés ne sont pas supprimés pour éviter l’invalidation des sauvegardes qui font référence à ces fichiers. Le fichier est tronqué, mais il n’est pas supprimé physiquement afin de conserver les sauvegardes FILE_SNAPSHOT. Pour plus d’informations, consultez Sauvegarde et restauration SQL Server avec Stockage Blob Microsoft Azure. S’applique à : SQL Server 2016 (13.x) jusqu’à la version actuelle.

SQL Server

Si vous supprimez un instantané de base de données, celui-ci l'est également d'une instance de SQL Server. Il en est de même pour les fichiers partiellement alloués du système de fichiers physiques NTFS utilisés par l'instantané. Pour plus d’informations sur l’utilisation des fichiers partiellement alloués par les captures instantanées de base de données, consultez l’article Instantanés de base de données. La suppression d'un instantané de base de données efface le cache de plan pour l'instance de SQL Server. Cette opération entraîne la recompilation de tous les plans d'exécution ultérieurs et peut entraîner une baisse temporaire et brutale des performances des requêtes. Pour chaque mémoire cache effacée dans le cache de plan, le journal des erreurs SQL Server contient le message d’information suivant : « SQL Server a rencontré %d occurrence(s) de vidages de mémoire cache pour la mémoire cache ’%s’ (partie du cache du plan) en raison d’opérations de maintenance ou de reconfiguration de base de données ». Ce message est enregistré toutes les cinq minutes si le cache est vidé au cours de cet intervalle de temps.

Interopérabilité

SQL Server

Pour supprimer une base de données publiée à des fins de réplication transactionnelle, ou bien une base de données publiée ou abonnée à une réplication de fusion, vous devez d'abord supprimer sa réplication. Si une base de données est endommagée, si vous ne pouvez pas supprimer la réplication dans un premier temps ou si les deux cas de figure se présentent, vous pouvez toujours, dans la plupart des cas, supprimer la base de données à l'aide de l'instruction ALTER DATABASE pour la déconnecter, puis la supprimer.

Si la base de données intervient dans l'envoi de journaux, supprimez l'envoi de journaux avant de supprimer la base de données. Pour plus d’informations, consultez À propos de la copie des journaux de transaction.

Limitations et restrictions

Les bases de données système ne peuvent pas être supprimées.

L'instruction DROP DATABASE doit être exécutée en mode autocommit et elle n'est pas autorisée dans une transaction implicite ou explicite. Le mode autocommit est le mode par défaut pour la gestion des transactions.

Avertissement

Vous ne pouvez pas supprimer une base de données en cours d'utilisation, Cela signifie que les verrous sont maintenus pour la lecture ou l’écriture par n’importe quel utilisateur. Une façon de supprimer des utilisateurs de la base de données consiste à utiliser ALTER DATABASE pour affecter à la base de données la valeur SINGLE_USER. Dans cette stratégie, vous devez exécuter l’instruction ALTER DATABASE et DROP DATABASE dans le même lot, afin d’éviter qu’une autre connexion revendiquant une session mono-utilisateur soit autorisée. Consultez l’exemple D ci-dessous.

SQL Server

Les instantanés de base de données doivent être supprimés avant que la base de données ne soit supprimée.

La suppression d’une base de données activée pour Stretch Database ne supprime pas les données distantes. Si vous souhaitez supprimer les données distantes, vous devez le faire manuellement.

Important

Stretch Database est déprécié dans SQL Server 2022 (16.x) et Azure SQL Database. Cette fonctionnalité sera supprimée dans une version future de moteur de base de données. Évitez d'utiliser cette fonctionnalité dans de nouveaux travaux de développement, et prévoyez de modifier les applications qui utilisent actuellement cette fonctionnalité.

Azure SQL Database

Vous devez être connecté à la base de données master pour supprimer une base de données.

L'instruction DROP DATABASE doit être la seule instruction d'un traitement SQL et vous pouvez supprimer une seule base de données à la fois.

Azure Synapse Analytics

Vous devez être connecté à la base de données master pour supprimer une base de données.

L'instruction DROP DATABASE doit être la seule instruction d'un traitement SQL et vous pouvez supprimer une seule base de données à la fois.

Autorisations

SQL Server

Nécessite l’autorisation CONTROL sur la base de données, ou l’autorisation ALTER ANY DATABASE, ou l’appartenance au rôle de base de données fixe db_owner.

Azure SQL Database

Seule la connexion principale au niveau du serveur (créée par le processus de provisionnement) ou les membres du rôle de base de données dbmanager peuvent supprimer une base de données.

Analytics Platform System (PDW)

Nécessite l’autorisation CONTROL sur la base de données, ou l’autorisation ALTER ANY DATABASE, ou l’appartenance au rôle de base de données fixe db_owner.

Exemples

R. Suppression d'une base de données unique

L'exemple suivant supprime la base de données Sales.

DROP DATABASE Sales;

B. Suppression de plusieurs bases de données

S’applique à : SQL Server 2008 (10.0.x) et versions ultérieures.

L'exemple suivant supprime chacune des bases de données répertoriées.

DROP DATABASE Sales, NewSales;

C. Suppression d'un instantané de base de données

S’applique à : SQL Server 2008 (10.0.x) et versions ultérieures.

L’exemple suivant supprime un instantané de base de données, nommé sales_snapshot0600, sans affecter la base de données source.

DROP DATABASE sales_snapshot0600;

D. Suppression d’une base de données après vérification de son existence

L’exemple suivant vérifie d’abord si une base de données nommée Sales existe. Si tel est le cas, l’exemple passe la base de données nommée Sales en mode mono-utilisateur pour forcer la déconnexion de toutes les autres sessions, puis supprime la base de données. Pour plus d’informations sur SINGLE_USER, consultez Options 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;

Voir aussi