Quiero eliminar una base de datos. He utilizado el siguiente código, pero fue en vano.
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);
}
}
Recibo un error porque no se puede eliminar la base de datos porque está actualmente en uso . Ayúdame con el problema mencionado anteriormente.
c#
asp.net
sql-server
sachin kulkarni
fuente
fuente
antes de descartar una base de datos, primero descarta la conexión a esa base de datos.
Encontré una solución en 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)
fuente
Para el servidor SQL mgmt. estudio:
Haga clic con el botón derecho en la base de datos: Propiedades -> Opciones -> Restringir acceso: establezca en "Usuario único" y realice la eliminación después
fuente
drop database myDatabase
. No solucionó el problema. el mismo error (... it is currently is use
) sucedió.Es demasiado tarde, pero puede ser útil para futuros usuarios.
Puede usar la siguiente consulta antes de descartar la consulta de la base de datos:
alter database [MyDatbase] set single_user with rollback immediate drop database [MyDatabase]
Funcionará. También puede consultar
¿Cómo especifico "cerrar conexiones existentes" en el script SQL?
Espero que te ayude :)
fuente
use master go
también si actualmente selecciona [MyDatabase]En SQL Server Management Studio 2016, realice lo siguiente:
Haga clic derecho en la base de datos
Haga clic en eliminar
Compruebe cerrar las conexiones existentes
Realizar operación de eliminación
fuente
select * from sys.sysprocesses where dbid = DB_ID('Test')
(Reemplace 'Prueba' con el nombre de la base de datos que está intentando eliminar) Esto le dirá qué procesos la están usando.
Si aún desea forzar la caída, el enfoque definitivo es:
USE master; GO ALTER DATABASE Test SET SINGLE_USER WITH ROLLBACK IMMEDIATE; GO DROP DATABASE Test;
Espero que esto ayude !
fuente
Primero haga que su base de datos esté fuera de línea, luego sepárela,
Use Master GO ALTER DATABASE dbname SET OFFLINE GO EXEC sp_detach_db 'dbname', 'true'
fuente
DROP DATABASE dbname;
Si suelta la base de datos en SQL Management Studio y recibe el mensaje, no olvide que usa Master como base de datos seleccionada; de lo contrario, su consulta también es una conexión a la base de datos.
USE Master; GO DROP DATABASE AdventureWorks; GO
fuente
Una solución alternativa de fuerza bruta podría ser:
Detenga el servicio de SQL Server.
Elimine los archivos .mdf y .ldf correspondientes.
Inicie el servicio de SQL Server.
Conéctese con SSMS y elimine la base de datos.
fuente
Quería decir que utilicé un script que se deriva de dos de las respuestas a continuación.
Apoyos para @Hitesh Mistry y @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]]]
fuente
Usando MS SQL Server 2008, en el cuadro de diálogo ELIMINAR con opciones de conexión Cerrar, este es el script generado, supongo que es el mejor:
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
fuente
USE [master] IF EXISTS(SELECT * FROM sys.databases WHERE name = 'Database_Name') BEGIN -- your script here END
Solo quería dar un vb.net (como con el lenguaje c si quiero convertir ...) Estaba teniendo un problema similar para desinstalar uno de mis programas, soltar la base de datos fue un poco complicado, sí, podría hacer que los usuarios ingresen al servidor. usando Express, pero eso no está limpio, después de algunas miradas alrededor, obtuve un poco de código perfecto ...
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
Espero que esto ayude a cualquiera que busque xChickenx
ACTUALIZAR Usando este convertidor aquí está la versión 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); } }
fuente
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
fuente
No puede eliminar una base de datos que se esté utilizando actualmente, sin embargo, puede utilizar el
sp_detach_db
procedimiento almacenado si desea eliminar una base de datos del servidor sin eliminar los archivos de la base de datos.fuente
simplemente cambiar el nombre de la base de datos (para eliminarlo) hizo el truco para mí. se liberó de cualquier proceso que estuviera accediendo a la base de datos, por lo que pude eliminar la base de datos.
fuente
Vaya a la sección de bases de datos disponibles y seleccione master. Luego prueba DROP DATABASE the_DB_name.
fuente
Para eliminar una base de datos incluso si se está ejecutando, puede usar este archivo por lotes
@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
fuente