Je veux déposer 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);
}
}
Je reçois une erreur en tant que ne peut pas supprimer la base de données car elle est actuellement utilisée. S'il vous plaît aidez-moi dans le problème mentionné ci-dessus.
Quelqu'un connecté à la base de données. Essayez de passer à une autre base de données, puis de la supprimer
Essayer
SP_WHO
pour voir qui s'est connecté
et KILL
si nécessaire
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)
Pour le serveur SQL mgmt. studio:
Cliquez avec le bouton droit sur la base de données: Propriétés -> Options -> Restreindre: définissez sur "Utilisateur unique", puis effectuez la suppression.
C'est trop tard, mais cela pourrait ê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 puis-je spécifier "fermer les connexions existantes" dans le script SQL
J'espère que ça va t'aider :)
Dans SQL Server Management Studio 2016, procédez comme suit:
Clic droit sur la base de données
Cliquez sur supprimer
Vérifiez fermer les connexions existantes
Effectuer une opération de suppression
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 drop alors, 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 !
Si vous déposez la base de données dans SQL Management Studio et recevez le message, n'oubliez pas que vous utilisez Master comme base de données sélectionnée, sinon votre requête constitue également une connexion à la base de données.
USE Master;
GO
DROP DATABASE AdventureWorks;
GO
Commencez par déconnecter votre base de données après l'avoir détachée, par exemple.
Use Master
GO
ALTER DATABASE dbname SET OFFLINE
GO
EXEC sp_detach_db 'dbname', 'true'
Je voulais dire que j'ai utilisé un script dérivé de deux des réponses ci-dessous.
Accessoires de @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]]]
Une solution 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.
Je voulais juste donner à vb.net (comme avec le langage C si je veux convertir ..) J'avais un problème similaire pour l'uninstal de l'un de mes programmes, la suppression de la base de données était un peu délicate. en utilisant Express, mais ce n’est pas propre, après quelques recherches autour, nous avons obtenu un petit bout de code parfait ensemble ...
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 ceux qui cherchent xChickenx
[~ # ~] mettre à jour [~ # ~] Utiliser this 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);
}
}
Accédez à la section des bases de données disponibles et sélectionnez maître. Puis essayez DROP DATABASE the_DB_name.
Vous ne pouvez pas supprimer une base de données en cours d'utilisation, mais vous pouvez utiliser sp_detach_db
procédure stockée si vous souhaitez supprimer une base de données du serveur sans supprimer les fichiers de la base de données.
En utilisant MS SQL Server 2008, dans la boîte de dialogue SUPPRIMER avec les options de connexion Fermer, voici 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
le simple fait de renommer la base de données (à supprimer) a été efficace pour moi. il a échappé à tout processus accédant à la base de données et j'ai donc pu supprimer la base de données.