
Я пытаюсь удалить базу данных 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".
Почему он мне говорит, что он в данный момент используется. Возможно ли мне удалить, например, каталог или что-то еще из файловой системы, чтобы избавиться от этой базы данных?
Любая помощь будет оценена по достоинству.
Спасибо.
решение1
Иногда IntelliSense и/или Management Studio зависают открытыми соединениями только потому, что вы щелкнули по базе данных в Object Explorer. Кроме того, если у вас есть задания SQL Agent, которые обращаются к базе данных, они не будут остановлены отключением 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
решение2
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();
}
}
решение3
При удалении в SSMS есть флажок «Закрыть существующие подключения». Этот флажок не отмечен по умолчанию. Установите флажок, и все подключения к БД будут прекращены, что позволит вам удалить его.