如何強制刪除 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 會因為您在物件資源管理器中按一下資料庫而將連線掛起。此外,如果您有任何存取資料庫的 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

答案2

http://www.morgantechspace.com/2013/11/Cannot-drop-database-because-it-is-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 中刪除它時,會有一個複選框顯示「關閉現有連線」。預設情況下不選取此複選框。選取該框,與資料庫的任何連線都會終止,以便您將其刪除。

相關內容