Je veux supprimer une base de données. J'ai utilisé le code suivant, mais en vain.
public void DropDataBase(string DBName,SqlConnection scon)
{
try
{
SqlConnection.ClearAllPools();
SqlCommand cmd = new SqlCommand("ALTER DATABASE " + DBName + " SET SINGLE_USER WITH ROLLBACK IMMEDIATE", scon);
cmd.CommandType = CommandType.Text;
scon.Open();
cmd.ExecuteNonQuery();
scon.Close();
SqlCommand cmddrpdb = new SqlCommand("drop database " + DBName + "", scon);
cmddrpdb.CommandType = CommandType.Text;
scon.Open();
cmddrpdb.ExecuteNonQuery();
scon.Close();
}
catch (Exception ex)
{
MessageBox.Show("DropDataBase : " +ex.Message);
}
}
J'obtiens une erreur car je ne peux pas supprimer la base de données car elle est actuellement utilisée . Veuillez m'aider dans le problème mentionné ci-dessus.
c#
asp.net
sql-server
sachin kulkarni
la source
la source
avant de supprimer une base de données, vous supprimez d'abord la connexion à cette base de données.
J'ai trouvé une solution sur http://www.kodyaz.com/articles/kill-all-processes-of-a-database.aspx
DECLARE @DatabaseName nvarchar(50) SET @DatabaseName = N'YOUR_DABASE_NAME' DECLARE @SQL varchar(max) SELECT @SQL = COALESCE(@SQL,'') + 'Kill ' + Convert(varchar, SPId) + ';' FROM MASTER..SysProcesses WHERE DBId = DB_ID(@DatabaseName) AND SPId <> @@SPId --SELECT @SQL EXEC(@SQL)
la source
Pour le serveur SQL mgmt. studio:
Faites un clic droit sur la base de données: Propriétés -> Options -> Restreindre l'accès: Réglez sur "Utilisateur unique" et effectuez la suppression par la suite
la source
drop database myDatabase
. Cela n'a pas résolu le problème. la même erreur (... it is currently is use
) s'est produite.Il est trop tard, mais cela peut être utile pour les futurs utilisateurs.
Vous pouvez utiliser la requête ci-dessous avant de supprimer la requête de base de données:
alter database [MyDatbase] set single_user with rollback immediate drop database [MyDatabase]
Ça va marcher. Vous pouvez également vous référer à
Comment spécifier "fermer les connexions existantes" dans le script SQL
J'espère que cela vous aidera :)
la source
use master go
si vous sélectionnez actuellement [MyDatabase]Dans SQL Server Management Studio 2016, procédez comme suit:
Faites un clic droit sur la base de données
Cliquez sur supprimer
Vérifier fermer les connexions existantes
Effectuer l'opération de suppression
la source
select * from sys.sysprocesses where dbid = DB_ID('Test')
(Remplacez «Test» par le nom de la base de données que vous essayez de supprimer) Cela vous indiquera quels processus l'utilisent.
Si vous voulez toujours forcer la chute, l'approche ultime est:
USE master; GO ALTER DATABASE Test SET SINGLE_USER WITH ROLLBACK IMMEDIATE; GO DROP DATABASE Test;
J'espère que cela t'aides !
la source
Commencez par mettre votre base de données hors ligne, puis détachez-la, par exemple
Use Master GO ALTER DATABASE dbname SET OFFLINE GO EXEC sp_detach_db 'dbname', 'true'
la source
DROP DATABASE dbname;
Si vous déposez la base de données dans SQL Management Studio et que vous obtenez le message, n'oubliez pas que vous utilisez Master comme base de données sélectionnée, sinon votre requête est également une connexion à la base de données.
USE Master; GO DROP DATABASE AdventureWorks; GO
la source
Une solution de contournement de force brute pourrait être:
Arrêtez le service SQL Server.
Supprimez les fichiers .mdf et .ldf correspondants.
Démarrez le service SQL Server.
Connectez-vous avec SSMS et supprimez la base de données.
la source
Je voulais souligner que j'ai utilisé un script dérivé de deux des réponses ci-dessous.
Accessoires pour @Hitesh Mistry et @unruledboy
DECLARE @DatabaseName nvarchar(50) SET @DatabaseName = N'[[[DatabaseName]]]' DECLARE @SQL varchar(max) SELECT @SQL = COALESCE(@SQL,'') + 'Kill ' + Convert(varchar, SPId) + ';' FROM MASTER..SysProcesses WHERE DBId = DB_ID(@DatabaseName) AND SPId <> @@SPId EXEC(@SQL) alter database [[[DatabaseName]]] set single_user with rollback immediate DROP DATABASE [[[DatabaseName]]]
la source
En utilisant MS SQL Server 2008, dans la boîte de dialogue SUPPRIMER avec les options de connexion Fermer, c'est le script généré, je suppose que c'est le meilleur:
EXEC msdb.dbo.sp_delete_database_backuphistory @database_name = N'YOUR_DATABASE_NAME' GO USE [master] GO ALTER DATABASE [YOUR_DATABASE_NAME] SET SINGLE_USER WITH ROLLBACK IMMEDIATE GO USE [master] GO /****** Object: Database [YOUR_DATABASE_NAME] Script Date: 01/08/2014 21:36:29 ******/ DROP DATABASE [YOUR_DATABASE_NAME] GO
la source
USE [master] IF EXISTS(SELECT * FROM sys.databases WHERE name = 'Database_Name') BEGIN -- your script here END
Je voulais juste donner un vb.net (comme avec le langage c si je veux convertir ..) J'avais un problème similaire pour la désinstallation de l'un de mes programmes, abandonner la base de données était un peu délicat, oui, les utilisateurs pouvaient aller dans le serveur. en utilisant Express, mais ce n'est pas propre, après quelques regards, nous avons obtenu un petit morceau de code parfait ...
Sub DropMyDatabase() Dim Your_DB_To_Drop_Name As String = "YourDB" Dim Your_Connection_String_Here As String = "SERVER=MyServer;Integrated Security=True" Dim Conn As SqlConnection = New SqlConnection(Your_Connection_String_Here) Dim AlterStr As String = "ALTER DATABASE " & Your_DB_To_Drop_Name & " SET OFFLINE WITH ROLLBACK IMMEDIATE" Dim AlterCmd = New SqlCommand(AlterStr, Conn) Dim DropStr As String = "DROP DATABASE " & Your_DB_To_Drop_Name Dim DropCmd = New SqlCommand(DropStr, Conn) Try Conn.Open() AlterCmd.ExecuteNonQuery() DropCmd.ExecuteNonQuery() Conn.Close() Catch ex As Exception If (Conn.State = ConnectionState.Open) Then Conn.Close() End If MsgBox("Failed... Sorry!" & vbCrLf & vbCrLf & ex.Message) End Try End Sub
J'espère que cela aide tous ceux qui recherchent xChickenx
MISE À JOUR En utilisant ce convertisseur, voici la version C #:
public void DropMyDatabase() { var Your_DB_To_Drop_Name = "YourDB"; var Your_Connection_String_Here = "SERVER=MyServer;Integrated Security=True"; var Conn = new SqlConnection(Your_Connection_String_Here); var AlterStr = "ALTER DATABASE " + Your_DB_To_Drop_Name + " SET OFFLINE WITH ROLLBACK IMMEDIATE"; var AlterCmd = new SqlCommand(AlterStr, Conn); var DropStr = "DROP DATABASE " + Your_DB_To_Drop_Name; var DropCmd = new SqlCommand(DropStr, Conn); try { Conn.Open(); AlterCmd.ExecuteNonQuery(); DropCmd.ExecuteNonQuery(); Conn.Close(); } catch(Exception ex) { if((Conn.State == ConnectionState.Open)) { Conn.Close(); } Trace.WriteLine("Failed... Sorry!" + Environment.NewLine + ex.Message); } }
la source
DECLARE @DatabaseName nvarchar(50) SET @DatabaseName = N'your_database_name' DECLARE @SQL varchar(max) SELECT @SQL = COALESCE(@SQL,'') + 'Kill ' + Convert(varchar, SPId) + ';' FROM MASTER..SysProcesses WHERE DBId = DB_ID(@DatabaseName) AND SPId <> @@SPId --SELECT @SQL EXEC(@SQL)
drop database your_database
la source
Vous ne pouvez pas supprimer une base de données actuellement utilisée, mais vous pouvez utiliser la
sp_detach_db
procédure stockée si vous souhaitez supprimer une base de données du serveur sans supprimer les fichiers de base de données.la source
le simple fait de renommer la base de données (à supprimer) a fait l'affaire pour moi. il s'est détaché de tout processus accédant à la base de données, et j'ai donc pu supprimer la base de données.
la source
Accédez à la section des bases de données disponibles et sélectionnez maître. Essayez ensuite DROP DATABASE the_DB_name.
la source
Pour supprimer une base de données même si elle est en cours d'exécution, vous pouvez utiliser ce fichier de commandes
@echo off set /p dbName= "Enter your database name to drop: " echo Setting to single-user mode sqlcmd -Q "ALTER DATABASE [%dbName%] SET SINGLE_USER WITH ROLLBACK IMMEDIATE" echo Dropping... sqlcmd -Q "drop database %dbName%" echo Completed. pause
la source