Как принудительно удалить базу данных MSSQL Server

Как принудительно удалить базу данных MSSQL Server

Я пытаюсь удалить базу данных 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

Отhttp://www.morgantechspace.com/2013/11/Cannot-drop-database-because-it-currently-in-use-in-MS-SQL-Server.html

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 есть флажок «Закрыть существующие подключения». Этот флажок не отмечен по умолчанию. Установите флажок, и все подключения к БД будут прекращены, что позволит вам удалить его.

Связанный контент