
Estoy intentando eliminar una base de datos del servidor MSSQL, pero no tengo suerte. He probado varias cosas como
user
ALTER DATABASE my_database
SET RESTRICTED_USER
WITH ROLLBACK IMMEDIATE;
GO
DROP DATABASE my_database;
GO
También intenté hacer clic derecho sobre él y eliminarlo.
Esto no funciona, me dice "No se puede eliminar la base de datos "ima_debts" porque actualmente está en uso". El caso es que definitivamente no hay ningún otro usuario conectado a él. De hecho, desactivé TCP/IP para la base de datos y la reinicié.
Ni siquiera "Microsoft SQL Server Management Studio (Administrador)" está conectado. Me aseguré de iniciar sesión en "master".
¿Por qué me dice que está actualmente en uso? ¿Puedo eliminar quizás un directorio o algo del sistema de archivos para deshacerme de esta base de datos?
Cualquier ayuda sería apreciada.
Gracias.
Respuesta1
A veces, IntelliSense y/o Management Studio bloquearán las conexiones abiertas solo porque hizo clic en la base de datos en el Explorador de objetos. Además, si tiene trabajos del Agente SQL que acceden a la base de datos, estos no se detendrán al deshabilitar TCP/IP.
Independientemente, el siguiente script "se hará cargo" de la base de datos colocándola en modo de usuario único en la sesión y luego la desconectará para que nadie pueda conectarse a ella para ejecutar consultas.
Luego puede eliminar la base de datos usando Management Studio o T-SQL.
USE [MyDB];
GO
ALTER DATABASE [MyDB] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
ALTER DATABASE [MyDB] SET OFFLINE;
GO
Respuesta2
USE [master]
GO
ALTER DATABASE [TestDB] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
USE [master]
GO
/****** Object: Database [TestDB] Script Date: 11/29/2013 13:40:36 ******/
DROP DATABASE [TestDB]
GO
Cª#
public static void DeleteDataBase()
{
using (SqlConnection sqlconnection = new
SqlConnection(@"Data Source=.\sqlexpress;Initial Catalog=master;Integrated Security=SSPI;"))
{
sqlconnection.Open();
// if you used master db as Initial Catalog, there is no need to change database
sqlconnection.ChangeDatabase("master");
string rollbackCommand = @"ALTER DATABASE [TestDB] SET SINGLE_USER WITH ROLLBACK IMMEDIATE";
SqlCommand deletecommand = new SqlCommand(rollbackCommand, sqlconnection);
deletecommand.ExecuteNonQuery();
string deleteCommand = @"DROP DATABASE [TestDB]";
deletecommand = new SqlCommand(deleteCommand, sqlconnection);
deletecommand.ExecuteNonQuery();
}
}
Respuesta3
Cuando lo elimina en SSMS, hay una casilla de verificación que dice "Cerrar conexiones existentes". Esta casilla de verificación no está marcada de forma predeterminada. Marque la casilla y se cancelará cualquier conexión a la base de datos, lo que le permitirá eliminarla.