如何强制删除 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 (Administrator)”都无法连接到它。我已确保登录到“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 中删除它时,会有一个复选框显示“关闭现有连接”。默认情况下不选中此复选框。选中此框,任何与数据库的连接都将终止,允许您删除它。

相关内容