Я пытаюсь удалить базу данных MSSQL Server, но мне не повезло. Я пробовал несколько вещей, например
user
ALTER DATABASE my_database
SET RESTRICTED_USER
WITH ROLLBACK IMMEDIATE;
GO
DROP DATABASE my_database;
GO
Я также попытался щелкнуть по нему правой кнопкой мыши и удалить.
Это не работает, это говорит мне "Невозможно удалить базу данных" ima_debts ", потому что она в настоящее время используется". Дело в том, что к нему точно не подключен другой пользователь. Фактически я отключил TCP / IP для базы данных и перезапустил ее.
К нему не подключена даже «Microsoft SQL Server Management Studio (администратор)». Я убедился, что вошел в "master".
Почему он говорит мне, что сейчас используется? Могу ли я удалить каталог или что-то из файловой системы, чтобы избавиться от этой базы данных?
Любая помощь будет оценена.
Спасибо.
Иногда IntelliSense и / или Management Studio будут зависать от открытия соединений только потому, что вы щелкнули базу данных в обозревателе объектов. Кроме того, если у вас есть задания агента SQL, которые обращаются к базе данных, они не будут остановлены путем отключения TCP / IP.
Тем не менее, следующий сценарий «возьмет на себя» базу данных, переведя ее в однопользовательский режим в сеансе, а затем переведет ее в автономный режим, чтобы никто не мог подключиться к ней для выполнения запросов.
Затем вы можете удалить базу данных с помощью Management Studio или T-SQL.
USE [MyDB];
GO
ALTER DATABASE [MyDB] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
ALTER DATABASE [MyDB] SET OFFLINE;
GO
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();
}
}
Когда вы удаляете его в SSMS, появляется флажок «Закрыть существующие подключения». По умолчанию этот флажок не установлен. Установите этот флажок, и любые соединения с БД будут прерваны, и вы сможете их удалить.